分类: 力扣Hot100

记录力扣hot100题的刷题历程与思路。

18 篇文章

力扣hot100—二刷
记录二刷力扣hot100,此次二刷主要是再次熟悉思路与常见的方法。用时二周。 常用容器函数对比 速记:只有queue系列能poll、offer、peek;Stack有push、peek;Map用put,其他用add。 双端队列能拿来当Stack用,方法和stack的一致 双端队列的offer等价于offerLast、poll等价于pollFirst…
力扣hot100—堆3题
数组中的第K个最大元素 两种方法,第一种,使用快排的改进版本。第二种维护一个k大小的最小堆,堆顶是当前k个元素里面最小的。 快速排序的核心是:迭代选中的某个数在其有序列中的下标位置,因此可以每次排序完毕后,查看下是不是符合第k个。 可以改进快速排序算法来解决这个问题:在分解的过程当中,我们会对子数组进行划分,如果划分得到的 q 正好就是我们需要的下…
力扣hot100—矩阵4题
矩阵置0 把第一行第一列拿来当标记数组,这样就可以做到O(1)空间复杂度,注意一开始特判下第一行和第一列有没有有0的数,有0的数字就flag记录下。 class Solution { public void setZeroes(int[][] matrix) { int m = matrix.length; int n = matrix[0].le…
力扣hot100—普通数组5题
最大子数组和 动态规划 public int maxSubArray(int[] nums) { if (nums == null || nums.length == 0) return 0; int[] dp = new int[nums.length]; dp[0] = nums[0]; int maxSum = dp[0]; for (int…
力扣hot100—动态规划&多维动态规划15题
爬楼梯 爬第n阶楼梯的方法数量,等于 2 部分之和: 爬上 n−1 阶楼梯的方法数量。因为再爬1阶就能到第n阶 爬上 n−2 阶楼梯的方法数量,因为再爬2阶就能到第n阶 class Solution { public int climbStairs(int n) { // dp[i] 表示爬到第i层台阶的方法有多少种 int[] dp = new …
力扣hot100—贪心算法&技巧9题
感觉贪心算法本质上也都是技巧和思路,需要脑子,和技巧栏目放一起。 买卖股票的最佳时机 有点类似DP。迭代每天的价格,更新当前遇到的最小价格和当前能得到的最大利润,最大利润就是p = Math.max(p, 今天价格-历史最小价格) 因为本题只能买一次,所以最大的利润肯定是出现在 过去 最小买入的时候。 class Solution { public…
力扣hot100—栈5题
写题目的时候,一般用双端队列来模拟栈。 双端队列: Deque<> queue = new LinkedList<>(); // 添加到队尾 deque.offerLast(1); // 推荐,返回true/false // 添加到队首 deque.offerFirst(2); // 推荐 // 移除队首 first = deque.p…
力扣hot100—二分查找6题
二分查找的通用板子,需要注意理解: ep:1,2,2,2,3,5 //查大于等于target的第一个位置, target=2,目标位置是1 int l = 0, r = n - 1; while (l < r) { int mid = l + r >> 1; // 找最早的那个值,nums[mid] >= x时,即使等于目标值,也要继续向左找…