LeetCode Hot 100 - 子串 | 560.和为K的子数组、239.滑动窗口最大值、76.最小覆盖子串

560.和为K的子数组

前缀和+哈希表

要查找的子数组为连续的,可以由两个前缀和计算得出,满足题目的条件为preSum[i] - preSum[j-1] = k,所以我们可以用哈希表记录前缀和出现的次数,在遍历到位置 i 时计算出preSum[i] - k ,查看哈希表中是否有对应值,若有则取次数加入结果。

注意,用哈希表记录元素出现次数map.put(preSum , map.getOrDefault(preSum,0)+1);

java 复制代码
class Solution {
    public int subarraySum(int[] nums, int k) {
        int res = 0;
        int preSum = 0;
        HashMap<Integer,Integer> map = new HashMap<>();
        map.put(0,1);
        for(int i = 0 ; i<nums.length ; i++){
            preSum += nums[i];
            if(map.containsKey(preSum-k)){
                res += map.get(preSum-k);
            }
            map.put(preSum , map.getOrDefault(preSum,0)+1);
        }
        return res;
    }
}

239.滑动窗口最大值

利用单调队列,队列中保存索引值,并保持索引对应的元素递减,即如果加入的元素大于当前队尾元素,则弹出队尾元素(while),直到小于队尾元素或队列为空,放入该元素。

这样求滑动窗口的最大值仅需要 peekFirst 的值,每次循环要判断队首的元素索引如果不在窗口中了就要弹出。

注意:Deque的方法 offer、poll、First、Last

java 复制代码
class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        int[] res = new int[nums.length-k+1];
        Deque<Integer> deque = new LinkedList<>();
        for(int i = 0 ; i<k ; i++){
            while(!deque.isEmpty() && nums[deque.peekLast()]<nums[i]){
                deque.pollLast();
            }
            deque.offerLast(i);
        }
        res[0] = nums[deque.peekFirst()];
        for(int i = k ; i<nums.length ; i++){
            while(!deque.isEmpty() && nums[deque.peekLast()]<nums[i]){
                deque.pollLast();
            }
            deque.offerLast(i);
            if(deque.peekFirst()<=i-k) deque.pollFirst();
            res[i-k+1] =  nums[deque.peekFirst()];
        }
        return res;
    }
}

76.最小覆盖子串(pass)

相关推荐
大刀爱敲代码40 分钟前
基础算法01——二分查找(Binary Search)
java·算法
大小胖虎2 小时前
数据结构——第六章:图
数据结构·笔记··最小生成树·拓扑排序·最短路径
HR Zhou5 小时前
群体智能优化算法-正弦余弦算法(Sine Cosine Algorithm, SCA,含Matlab源代码)
算法·机器学习·matlab·优化·群体智能优化
自信的小螺丝钉5 小时前
Leetcode 378. 有序矩阵中第 K 小的元素 二分查找
算法·leetcode·矩阵·二分查找
m0_735234606 小时前
蓝桥杯算法实战分享:算法进阶之路与实战技巧
算法·职场和发展·蓝桥杯
程序员老周6666 小时前
矩阵补充,最近邻查找
算法·机器学习·推荐算法
_GR6 小时前
2021年蓝桥杯第十二届C&C++大学B组真题及代码
c语言·数据结构·c++·算法·蓝桥杯
奋进的小暄6 小时前
贪心算法(11)(java)加油站
算法·贪心算法
lwewan7 小时前
26考研——图_图的基本概念(6)
数据结构·考研
tpoog7 小时前
[贪心算法]最长回文串 && 增减字符串匹配 && 分发饼干
算法·贪心算法