![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
鸡蛋煎三成熟
这个作者很懒,什么都没留下…
展开
-
LeetCode#239,滑动窗口最大值,学习单调队列使用
单调队列 单调队列顾名思义就是队列中元素递增或者递减,元素入队出队时需维护队列的单调性。同单调栈一样,为了保证栈的单调性,在单调减栈中,如果遇到待入栈元素比栈顶大时,需要一直弹出栈顶元素后入栈。单调队列的情形类似,在单调递减队列中,如果遇到待入队元素比队尾大,需要一直让队尾元素出队直到队尾大于待入队元素。 LeetCode 239. 滑动窗口最大值 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。(你原创 2020-06-11 15:13:06 · 175 阅读 · 0 评论 -
【详解】LeetCode#34,在排序数组中查找元素的第一个和最后一个位置,学习二分查找,告别恼人的边界问题
二分查找 二分查找法的原理非常简单,而且能把查找的时间复杂度降为 O(logn),但我之前在做二分法的时候经常因为边界问题而摸不着头脑,比如右边界我该不该取的问题、while 循环的判断条件带不带 = 的问题。当然你完全可以根据自己的定义的边界,根据自己的想法决定 while 循环里带不带等号,但需要注意最后跳出循环时左右边界情况,再做讨论。所以,二分查找题主要考察的是细节,要把细节理解清楚就需要规范且完整的思考过程,定义好 l 和 r 的含义,到底是 [l, r] 还是 [l, r)。 刷题的意义就再于形原创 2020-06-08 16:25:24 · 216 阅读 · 0 评论 -
【详解】LeetCode#560|974,子数组的和为K|被K整除的个数,学习前缀和+HashMap
前缀和 定义 前缀和:一个数组的某项下标之前(包括此项元素)的所有数组元素的和。 根据定义有: sum[i] = sum[i-1] + a[i] 可以以 O(1) 的时间求出区间 [i, j] 的区间和为 sum[i, j] = sum[i] - sum[j - 1] 一般前缀和配合 HashMap 使用,以空间换时间,将时间复杂度降到 O(n) LeetCode 560 560.和为K的子数组(前缀和算法)。 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。 示例原创 2020-06-02 16:48:49 · 221 阅读 · 0 评论 -
【详解】LeetCode#84.柱状图的最大矩形面积,学习单调栈使用
单调栈 单调递增栈:栈底到栈顶元素依次递增 单调递减栈:栈底到栈顶元素依次递减 用于解决:可以找到从左/右遍历第一个比它小/大的元素的位置 例题1:找到每一个数右边第一个比它大的数(单调递增栈) [10, 5, 8, 12, 6] 栈顶 [10] 栈底 栈顶 [5, 10] 栈底 栈顶 [8, 5, 10] 栈底 ( 8 把 5 删了,所以 8 就是 5 的右边第一个比 5 大的元素) 栈顶 [12, 8, 10] 栈底 ( 12 把 8 删了,1 进来把栈顶元素删了,谁就是比出栈元素右边大的第一个原创 2020-05-31 16:02:10 · 353 阅读 · 0 评论