type
status
date
slug
summary
tags
category
icon
password
为了梦想,为了希望,为了全人类的未来。
方法
刷题八极拳: 坑爹用例全出来 双分单哈滑递动
第一拳:坑爹用例全出来
- 最重要的一拳, 你要是少考虑了一种情况,整个算法函数就偏了,折腾半天就白耍了。卡在中间用例,或者死循环上,真噎人!即便你想到了后面的7拳,还是白耍!事实上差不多有一半的题目,它故意在例子上误导你,让你简单化算法,然后就偏了。。。
- 用例,用例!第一拳打在用例上,我觉得考虑全了,面试官,你看还漏不漏?
后7拳:双分单哈滑递动
- 绝大多数题目都是1000条数据以上,这就意味着你的算法效率必须低于O(n*n), 要不会超时。想运行的快速,O(n)级的算法都给套一遍:
- 双指针:一快一慢,两端往中间走,中间往两端走,行不行吧?
- 二分:排个序,单侧加倍二分,双侧二分,中间往两边分,有没有答案?
- 单调栈:双侧单调栈刷一刷
- 哈希集合:万能的字典集合,不用白不用
- 滑动串口:左滑一下,右滑一下,可能就过去了
- 递归:无论多少条数据,都可以万物归一递归下去,你就考虑一条的时候怎么整
- 动态规划:证明证明,我要做数学推拿
面对新题目,你不可能很快想到思路,就给他耍一套八级拳,可以框住绝大多数中高难度的题目了。耍不出来的话,再耍一遍,一定是变形的题目,拳是对的,发错位置打空气了,找面试官确认哪一拳打空了?!!
哈希表
123
双指针
1. 移动零
题目
方法一:冒泡 慢
方法二:双指针
2. 盛最多的水
起初用两个for循环遍历每种情况,结果超时了。
事实上有很多事情是可以忽略的,只会产生更坏的结果,所以做题还是需要更深入思考,不一定每种情况都要遍历。
3. 三数之和
当我们需要枚举数组中的两个元素时,如果我们发现随着第一个元素的递增,第二个元素是递减的,那么就可以使用双指针的方法,将枚举的时间复杂度从O(N^2)减少至O(N)。
4. 接雨水
当两个指针相遇时,即可得到能接的雨水总量。
滑动窗口
无重复字符的最长子串
找到字符串中所有字母异位子串
子串
和为K的子数组
方法一,枚举,时间复杂度O(n^2)
方法二:前缀和+哈希表 时间复杂度O(n)
滑动窗口最大值
最小覆盖子串
滑动窗口
普通数组
最大子数组和
方法一:动态规划
合并区间
先排序,再按以上三种情况进行讨论
轮转数组
除自身以外数组的乘积
缺失的第一个正数
矩阵
矩阵置零
优化空间复杂度方法:用矩阵的空间来作为标记
螺旋矩阵
定义上下左右边界然后收缩
旋转图像
搜索二维矩阵II
从左下角开始找也是可以的
链表
相交链表
反转链表
回文链表
环形链表
链表常见问题总结
环形链表II
合并两个有序链表
两数相加
返回结点是头结点时要使用预先指针
删除链表的倒数第N个结点
两两交换链表中的值
K个一组翻转链表
随机链表的复制
先用一个循环把新旧链表对应的两个结点捆绑在一个二元组里,然后再用一个循环完成对新链表每个结点的next域和random域的赋值
排序链表
合并K个升序链表
LRU缓存
二叉树
二叉树的中序遍历
二叉树的最大深度
翻转二叉树
对称二叉树
二叉树的直径
二叉树的层序遍历
BFS 的使用场景总结:层序遍历、最短路径问题
将有序数组转换为二叉搜索树
验证二叉搜索树
二叉搜索树中第K小的元素
二叉搜索树的中序遍历是按照键增加的顺序进行的
递归代码:
迭代代码:
二叉树的右视图
二叉树展开为链表
从前序与中序遍历序列构造二叉树
路径总和III
最终超时了
二叉树的最近公共祖先
二叉树中的最大路径和
图论
腐烂的橘子
回溯
全排列
括号生成
DFS+回溯
单词搜索
N皇后
二分查找
搜索插入位置
搜索二维矩阵
方法三:从左下角Z字形查找
在排序数组中查找元素的第一个和最后一个位置
GPT写法,看起来更清晰明了
寻找旋转排序数组中的最小值
寻找两个正序数组的中位数
栈
有效的括号
最小栈
字符串解码
每日温度
柱状图中最大的矩形
两个技巧:
- 在原数组前后添加0(两个哨兵)可以处理很多边界情况(个人觉得类似链表前面会定义一个prev结点)
- 单调栈,每次pop出来时计算宽度(前面一个元素肯定小于它,将要进来的后面一个元素肯定也小于它)
一个思路:
- 只想到了固定一个柱子,往右依次遍历,但没想到可以固定中间的柱子作为高,向左向右找最大宽度(虽说复杂度都是N方)
堆
数组中的第K个最大元素
下沉函数的参数有三个:原数组、根节点下标、堆大小
heap_size / 2 表示第一个非叶子节点(root为0)
left_child = 2 * root + 1;
right_child = 2 * root + 2;
前K个高频元素
方法二:直接用优先队列,不手搓堆了
数据流的中位数
贪心算法
买卖股票的最佳时机
跳跃游戏
跳跃游戏II
划分字母区间
动态规划
爬楼梯
杨辉三角
完全平方数
零钱兑换
最长递增子序列
分割等和子集
多维动态规划
不同路径
最小路径和
最长回文子串
技巧
- Author:S+M
- URL:http://www.sujiaming.top/article/7185c514-115c-4891-869c-6f56ca98e69e
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!