leetcode-9-28

1. 和为K的子数组【560】

        利用前缀和、哈希表;哈希表HashMap<Integer, Integer>存储的key是前缀和,value是前缀和出现的次数;

        pre += nums[i];判断pre-k在不在哈希表中,在的话,将其次数加1,否则默认为1;更新pre的键值。

2.滑动窗口最大值【239】

        使用双端队列实现单调队列:ArrayDeque<Integer>

        方法:peek(), peekLast(), poll(), pollLast()

        2.1 不在窗口内的元素弹出

        2.2 元素值小于当前元素值的弹出,使得首部存储的是最大值

        2.3 当索引为k-1之后,首部元素即最大元素加入到结果数组中

3.在排序数组中查找元素的第一个和最后一个位置【34】

         3.1 用二分法寻找第一个和最后一个位置,数组已排序

         3.2 寻找的过程中,二分法的基础上,只需判断:如果target和nums[i]相等,那么如果是找第一个值,则right  = mid - 1, 最后一个就left = mid + 1,这样可以分别向两边推进

         3.3 初始化的时候first = -1, last = -1

4. 搜索二维矩阵

        4.1 一次二分法:矩阵的元素为matrix[mid / n][mid %n],判断和target的关系,相当于在数组上二分,只不过下标要通过mid和n的关系来计算

        4.2 消去法:将搜索过程线性化

                4.2.1 从矩阵的右上角开始(0, n-1)
                4.2.2 比较target和当前元素,每一次比较都会消掉一行或一列

                4.2.3 最坏情况下需要进行m+n次比较

5. 搜索插入位置【35】

        5.1 就是简单的二分法,但是需要注意的是插入的位置

        5.2 由于left左边的元素都是小于目标值的元素,因此,如果没找到元素值,返回left的索引即可;如果找到,返回mid

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值