【LeetCode刷题-滑动窗口】--1695.删除子数组的最大得分

1695.删除子数组的最大得分

注意:子数组为不同元素

方法:滑动窗口

使用变长滑动窗口寻找数组nums中的以每个下标作为结束下标的元素各不相同的最长子数组。用[start,end]表示滑动窗口,初始时start=end=0,将滑动窗口的右端点end向右移动,移动过程中维护滑动窗口的左端点start,对于每个end寻找元素各不相同的最大滑动窗口

判断滑动窗口中是否有重复元素,需要使用哈希集合存储滑动窗口中出现的元素,用sum表示滑动窗口中的元素和。对于每个右端点end,将右端点处的元素记为num = nums[end],执行如下操作:

  • 将sum的值增加为num
  • 如果哈希集合中有元素num,则滑动窗口[start,end]中有两个元素num,因此将sum的值减去nums[start],从哈希集中中移除元素nums[start],然后将start向右移动一位,重复该操作直到哈希集合中没有元素num
  • 当前滑动窗口[start,end]中的子数组为以end作为结束下标的元素各不相同的最长子数组,其元素和为sum,使用sum更新最大得分
java 复制代码
class Solution {
    public int maximumUniqueSubarray(int[] nums) {
        Set<Integer> set = new HashSet<Integer>();
        int maxSum = 0,sum = 0,start = 0,end = 0,len = nums.length;
        while(end < len){
            int num = nums[end];
            sum += num;
            while(set.contains(num)){
                sum -= nums[start];
                set.remove(nums[start]);
                start++;
            }
            set.add(num);
            maxSum = Math.max(maxSum,sum);
            end++;
        }
        return maxSum;
    }
}
相关推荐
小xin过拟合2 小时前
day20 二叉树part7
开发语言·数据结构·c++·笔记·算法
nonono3 小时前
数据结构——线性表(链表,力扣中等篇,技巧型)
数据结构·leetcode·链表
lxmyzzs3 小时前
【图像算法 - 23】工业应用:基于深度学习YOLO12与OpenCV的仪器仪表智能识别系统
人工智能·深度学习·opencv·算法·计算机视觉·图像算法·仪器仪表识别
Learn Beyond Limits3 小时前
Multi-output Classification and Multi-label Classification|多输出分类和多标签分类
人工智能·深度学习·神经网络·算法·机器学习·分类·吴恩达
张较瘦_3 小时前
[论文阅读] 软件工程 | GPS算法:用“路径摘要”当向导,软件模型检测从此告别“瞎找bug”
论文阅读·算法·bug
2401_858286114 小时前
OS26.【Linux】进程程序替换(下)
linux·运维·服务器·开发语言·算法·exec·进程
张同学的IT技术日记4 小时前
【奇妙的数据结构世界】用图像和代码对队列的使用进行透彻学习 | C++
算法
极客BIM工作室4 小时前
强化学习算法分类与介绍(含权重更新公式)
算法·分类·数据挖掘
KarrySmile4 小时前
Day8--HOT100--160. 相交链表,206. 反转链表,234. 回文链表,876. 链表的中间结点
数据结构·算法·链表·双指针·快慢指针·hot100·灵艾山茶府
luckycoding5 小时前
1424. 对角线遍历 II
算法·leetcode·职场和发展