1、归并排序
数组逆序对的参考思路:
https://zhuanlan.zhihu.com/p/107280674
实际代码:
2、二分查找
二分查找,平方根和矩阵查找
https://www.nowcoder.com/practice/5145394607ea4c5f8b25755718bfddba?tpId=191&&tqId=38000&rp=1&ru=/activity/oj&qru=/ta/job-code-high-algorithm/question-ranking
3、最长无重复子串长度
核心思想:滑动窗口
https://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4?tpId=191&&tqId=36146&rp=1&ru=/activity/oj&qru=/ta/job-code-high-algorithm/question-ranking
4、双指针
双指针是一种在求和时很有效的一种算法
例如求和为0的三元组
https://www.nowcoder.com/practice/345e2ed5f81d4017bbb8cc6055b0b711?tpId=191&&tqId=36130&rp=1&ru=/activity/oj&qru=/ta/job-code-high-algorithm/question-ranking
核心问题:
在求和为零以后记得下标移动,否则循环无法结束
代码如下:
5、哈希表
费内存,但查得快
两数之和,先把值和索引存储在哈希表中
https://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f?tpId=191&&tqId=36133&rp=1&ru=/activity/oj&qru=/ta/job-code-high-algorithm/question-ranking
6、动态规划
动态规划的核心是要写出状态转换的方程和初始条件:
1、比如矩阵的最小路径和
1)状态转移方程
从上一行同一列或同一行的左边一个过来,再和当前值取和作为此时的最小值(最优状态)
2)初始条件
初始第一行/第一列的路径只有一种,可以直接写出
https://www.nowcoder.com/practice/7d21b6be4c6b429bb92d219341c4f8bb?tpId=191&&tqId=36293&rp=1&ru=/activity/oj&qru=/ta/job-code-high-algorithm/question-ranking
核心代码如下:
2、比如:子数组最大乘积
https://www.nowcoder.com/practice/9c158345c867466293fc413cff570356?tpId=191&&tqId=37487&rp=1&ru=/activity/oj&qru=/ta/job-code-high-algorithm/question-ranking
最关键是写出状态转移方程:
乘积存在负负得正的情况,也就是当此时元素是正负时求最大/最小值存在区别
大于0时,
和更大数的乘积为更大值,和更小数的乘积为更小值
小于0时,
和更大数的乘积为更小值,和更小数的乘积为更大值
7 、贪心
最次都要最优。
例如:买卖股票的最好时机,找到全局最小值,当前值-全局最小值的差值的全局最大值即为所求。
https://www.nowcoder.com/practice/64b4262d4e6d4f6181cd45446a5821ec?tpId=191&&tqId=36657&rp=1&ru=/activity/oj&qru=/ta/job-code-high-algorithm/question-ranking
8、并查集
???
例如:数组中的最长连续子序列
https://www.nowcoder.com/practice/eac1c953170243338f941959146ac4bf?tpId=191&&tqId=36126&rp=1&ru=/activity/oj&qru=/ta/job-code-high-algorithm/question-ranking
关键问题是:找到无相邻更小值的元素,然后找出其最长连续子序列,同时保存全局最大值。
核心代码如下:
网友评论