店铺设计素材,百度小程序排名优化,水煮鱼wordpress模板,手机开发者选项怎么关闭1695.删除子数组的最大得分 注意#xff1a;子数组为不同元素 方法#xff1a;滑动窗口
使用变长滑动窗口寻找数组nums中的以每个下标作为结束下标的元素各不相同的最长子数组。用[start,end]表示滑动窗口#xff0c;初始时startend0#xff0c;将滑动窗口的右端点end向右…1695.删除子数组的最大得分 注意子数组为不同元素 方法滑动窗口
使用变长滑动窗口寻找数组nums中的以每个下标作为结束下标的元素各不相同的最长子数组。用[start,end]表示滑动窗口初始时startend0将滑动窗口的右端点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更新最大得分
class Solution {public int maximumUniqueSubarray(int[] nums) {SetInteger set new HashSetInteger();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;}
}