标签: 模拟

18 篇文章

力扣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—贪心算法&技巧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时,即使等于目标值,也要继续向左找…
力扣hot100—LinkedHashMap实现LRU缓存
可以用LinkedHashMap的数据结构实现;要自己手写的话,就需要维护一个哈希+双向链表的数据结构,使用双链表来维护缓存项的访问顺序。最近访问的项位于链表的头部,而最久未访问的项位于链表的尾部。 Map<Integer,MyNodes>,底层就是数组+双向链表。put操作,找出来修改值,放到最前面,找不到就新增,节点放最前面get操作就把…