Skip to content

Latest commit

 

History

History
160 lines (86 loc) · 5.22 KB

leetcode-notes.md

File metadata and controls

160 lines (86 loc) · 5.22 KB

81. Set Matrix Zeroes

class Solution {
    public void setZeroes(int[][] matrix) {

    }
}

如何使用O(1)的空间完成任务?诀窍在于使用矩阵的第一行、第一列存储信息

103. Binary Tree Zigzag Level Order Traversal

注意stack与queue的区别

274. H-Index

参考:https://leetcode.com/problems/h-index/discuss/70768/Java-bucket-sort-O(n)-solution-with-detail-explanation

275. H-Index II

与前一题不同的地方是给定的citation是已经排完序了,要求时间复杂度为ln(n)

这里的问题非常经典,值得好好学习。

找到第一个满足以下条件的

citations[index] >= length(citations) - index. 

540. Single Element in a Sorted Array (Medium)

与上题有类似之处,可以参考学习(二分查找的原理)

121. Best Time to Buy and Sell Stock

解决方案为Kadane's Algorithm

21. Merge Two Sorted Lists

尾插法性能较低,有什么其他方案吗?

递归倒也是不错的方案(本质上是头插法)

7. Reverse Integer

注意整数溢出的问题

5. Longest Palindromic Substring

边界情况的处理非常有意思

居然不是使用暴力解法,而是使用动态规划,那就更有意思了

果然有可以复用的子结构

31. Next Permutation

未完待续

221. Maximal Square

动态规划

394. Decode String

可以暴力解法,也可以使用stack进行稍微优雅一点的处理

参考答案

56. Merge Intervals

参考答案

560. Subarray Sum Equals K

动态规划并不是最优,还有更好的解决方案(比如使用hashmap

621. Task Scheduler

排序与优先队列的使用

3. Longest Substring Without Repeating Characters

暴力解法性能底下

采用滑动窗口的处理方案 [i, j)

93. Restore IP Addresses

这道题目非常有意思,重点在于"01"这类ip地址组成部分是不合法的。

77. Combinations

这道题目不同于一般的回溯问题,关键在于不考虑combination中元素的顺序

39. Combination Sum

这道题目与上面一样,难点都是在于不考虑combination的顺序

这样就不是常规的dfs了,可能需要修改一下认知模型

这类问题,我们统一的解决方案是:要求后加入prefix的元素必须必prefix中所有元素都要大

40. Combination Sum II

与上面不同点,在于candidates里面的元素只能被使用一次(但是允许重复)

回溯问题终极总结

  1. prefix本来是有序的,如果我们的combination无序,那么我们将candidates排序即可
  2. 我们一开始处理candiates是unique的,如果可以重复,那么我们必须使用set在同一层过滤

146. LRU Cache

LRU的设计与实现:主要难点在于key->ts的存储与更新

4. Median of Two Sorted Arrays

动态规划

dp

70, 62(简单题)

926, 845(从右往左、从左往右,然后再合并)

801,926,790,818(dp[i][0], dp[i][1], 第二维是常数维)

经典题总结

dp-all

91. Decode Ways

关键在于对0的处理

0-1背包问题

0-1背包问题

背包问题解法

背包问题dp解法

两种背包问题的扩展

  1. 完全背包
  2. 多重背包

binary indexed tree

partial sum in each node

题目:307、315

二分查找

162. Find Peak Element

难点在于对于时间复杂度的要求, log(n)