算法-子串

目录

和为 K 的子数组

想不到,前缀和相减能够获得所有子区间的和,然后使用hashmap记录前缀和,value记录当前和的个数。注意要用前缀和j-i时,需要j>i;前缀和本身也需要判断是否为K。

java 复制代码
public class 和为K的子数组 {
    class Solution {
        public int subarraySum(int[] nums, int k) {
            int res = 0;
            Map<Integer, Integer> map = new HashMap<Integer,Integer>();

            int[] s = new int[nums.length];
            s[0] = nums[0];
            if (nums[0]==k)res++;
            map.put(s[0],1);
            for (int i = 1; i < nums.length; i++) {
                s[i] = s[i-1] + nums[i];
                if (s[i]==k) res++;
                // s[i] - s[j] = k;
                if (map.containsKey(s[i]-k)) res+=map.get(s[i]-k);
                map.put(s[i],map.getOrDefault(s[i],0) + 1);
            }

            return res;
        }
    }
}

滑动窗口最大值

用ArrayDeque队尾作为栈,每次将元素入栈前将栈中小于该元素的数据出栈,从而保证该元素前面的元素滑出窗口后该元素就是最大值,队头记录了当前窗口内的最大值,需要在输出窗口最大值前将队列中不属于窗口内的值出队首,通过队列记录下标实现。

java 复制代码
public class 滑动窗口最大值 {
    class Solution {
        public int[] maxSlidingWindow(int[] nums, int k) {
            int[] res = new int[nums.length - k + 1];
            ArrayDeque<Integer> queue = new ArrayDeque<>();

            for (int i = 0; i < nums.length; i++) {
                // 出栈直到栈中数据都比nums[i]大
                while (!queue.isEmpty() && nums[i]>=nums[queue.peekLast()]){
                    queue.pollLast();
                }
                // 当前元素入栈
                queue.offerLast(i);
                // 队首元素即为最大元素
                if (i+1>=k){
                    // 先将不在窗口的元素出队
                    while (queue.peekFirst()<i+1-k) queue.pollFirst();

                    res[i+1-k] = nums[queue.peekFirst()];
                }
            }

            return res;
        }
    }
}

最小覆盖子串

如果窗口内不包含子串那么r右移,包含后l右移直到窗口内不包含子串。

相关推荐
2301_764441334 小时前
LISA时空跃迁分析,地理时空分析
数据结构·python·算法
东北洗浴王子讲AI4 小时前
GPT-5.4辅助算法设计与优化:从理论到实践的系统方法
人工智能·gpt·算法·chatgpt
014-code4 小时前
订单超时取消与库存回滚的完整实现(延迟任务 + 状态机)
java·开发语言
Billlly5 小时前
ABC 453 个人题解
算法·题解·atcoder
玉树临风ives5 小时前
atcoder ABC 452 题解
数据结构·算法
feifeigo1235 小时前
基于马尔可夫随机场模型的SAR图像变化检测源码实现
算法
java1234_小锋5 小时前
Java高频面试题:Springboot的自动配置原理?
java·spring boot·面试
fengfuyao9855 小时前
基于STM32的4轴步进电机加减速控制工程源码(梯形加减速算法)
网络·stm32·算法
末央&6 小时前
【天机论坛】项目环境搭建和数据库设计
java·数据库
枫叶落雨2226 小时前
ShardingSphere 介绍
java