解题思路
滑动窗口的经典题型,直接套模板就行了。
相关代码
class Solution {
public long maximumSubarraySum(int[] nums, int k) {
int hash[] = new int[100010];
int cnt=0; //实际上窗口中的元素种数
long res=0;
long s[] = new long[nums.length+1];
for(int i=1;i<s.length;i++) s[i] = s[i-1]+nums[i-1];
for(int i=0,j=0;i<nums.length;i++){
hash[nums[i]]++;
if(hash[nums[i]]==1) cnt++;
if(i-j+1>k){
if(hash[nums[j]]==1) cnt--;
hash[nums[j]]--;
j++;
}
if(i>=k-1&&cnt==k) res = Math.max(res,s[i+1]-s[j]);
}
return res;
}
}