122.买卖股票的最佳时机 II 动态规划 考虑两个状态,天数和当天是否持有股票,不同状态下当天持有的最大现金: 当天持有股票:前一天持有并且当天不卖或者前一天没有当天买入。 当天没有持有股票:前一天没有持有并且当天不买或者前一天持有当天卖出。 最后一天不持有股票状态下的现金为最大值。 由于第n天的现金只与前一天的现金和是否持有股票有关,所以优化空间只用记录前一天持有和不持有股票的现金即可。 时间复杂度: O(N)空间复杂 2021-09-20 算法 > leetcode
1334.阈值距离内邻居最少的城市 Floyd算法计算所有点对之间最短路径。注意先遍历k,才能保证计算k之前,k-1的情况都计算完成了。 时间复杂度:O(N^3)空间复杂度:O(N^2) 2021-09-20 算法 > leetcode
136.邻值查找 Acwing 双向链表 用排序后的双向链表维护每个数字前后相邻的两个数字用来计算最大绝对值。 计算绝对值时根据原数组顺序从后往前遍历,处理完后则在链表中删除当前数字。 时间复杂度:O(N)空间复杂度:O(N) 2021-09-20 算法 > leetcode
152.乘积最大子数组 动态规划 考虑当前数字为正还是为负,并维护前序乘积最大和最小数组。 由于当前位置乘积最大值只与前一位置的乘积最大值或最小值有关,则可以优化数组为两个变量。 时间复杂度: O(N)空间复杂度: O(1) 2021-09-20 算法 > leetcode
154. 寻找旋转排序数组中的最小值 2 leetcode 使用二分法可以减少时间复杂度。注意有重复元素,遇到重复元素则可以删除一个,至少留有一个来参与最小值比较。 2021-09-20 算法 > leetcode
1584.连接所有点的最小费用 最小生成树问题,Kruskal 算法 任意一颗最小生成树一定包含无向图中权值最小的边。 把任何一个生成森林扩展成最小生成树,一定使用了图中剩余边中权值最小的边。 证明方法: 树上加一条边成环 + 反证法 时间复杂度:O(N^2logN)空间复杂度:O(N^2) 2021-09-20 算法 > leetcode
17.电话号码的字母组合 leetcode 深度优先遍历,注意这里每次选取数字必定会选取一个对应字母,不存在不选的情况。 时间复杂度:O(3^m x 4^n)空间复杂度:O(m+n) 2021-09-20 算法 > leetcode
18.四数之和 排序+双指针,注意剪枝的几种情况。 最小四个数比target大 选择的前两个数遇到重复数字时 剩下两数最大比 target-preSum 小或者最小比 target-preSum 大(也可以不判断) 剩下两数遇到重复数字时 时间复杂度:O(n^3)空间复杂度:O(logN),快排的递归深度 2021-09-20 算法 > leetcode