05-28:新刷算法题

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

关键问题是:找到无相邻更小值的元素,然后找出其最长连续子序列,同时保存全局最大值。

核心代码如下:

你可能感兴趣的:(05-28:新刷算法题)