C.滑动窗口-越短越合法/求最长/最大——1695. 删除子数组的最大得分
·
题目链接:1695. 删除子数组的最大得分(中等)
算法原理:
解法:滑动窗口
击败73.91%
时间复杂度O(N)
问题转化:滑动窗口内的元素不重复,求和的最大值
跟下题解法一摸一样👇
用HashMap解也是可以的,而且更简单,就是按着进窗口-更新-出窗口就可以了
但是用HashSet解就要先出窗口来判断进窗口的值是否窗口内已经有了
Java代码:
class Solution {
public int maximumUniqueSubarray(int[] nums) {
//问题转化:滑动窗口内的元素不重复,找和的最大值
Set<Integer> hash=new HashSet<>();
int n=nums.length,sum=0,ret=0;
for(int right=0,left=0;right<n;right++){
int in=nums[right];
//出窗口
while(hash.contains(in)){
sum-=nums[left];
hash.remove(nums[left++]);
}
//进窗口
sum+=in;
hash.add(in);
//更新
ret=Math.max(ret,sum);
}
return ret;
}
}
更多推荐



所有评论(0)