题目

给你一个正整数数组 nums ,请你从中删除一个含有 若干不同元素 的子数组删除子数组的 得分 就是子数组各元素之

返回 只删除一个 子数组可获得的 最大得分

如果数组 b 是数组 a 的一个连续子序列,即如果它等于 a[l],a[l+1],...,a[r] ,那么它就是 a 的一个子数组。

示例 1:

1
2
3
输入:nums = [4,2,4,5,6]
输出:17
解释:最优子数组是 [2,4,5,6]

示例 2:

1
2
3
输入:nums = [5,2,1,2,5,2,1,2,5]
输出:8
解释:最优子数组是 [5,2,1] 或 [1,2,5]

提示:

  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 104

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public int maximumUniqueSubarray(int[] nums) {
int n=nums.length;
int ans=0;
int count=0;
HashMap<Integer,Integer> map = new HashMap<>();
for(int left=0,right=0;right<n;right++){
map.put(nums[right],map.getOrDefault(nums[right],0)+1);
count+=nums[right];
while(map.size()<right-left+1){
map.merge(nums[left],-1,Integer::sum);
count-=nums[left];
if(map.get(nums[left])==0){
map.remove(nums[left]);
}
left++;
}
ans=Math.max(ans,count);
}
return ans;
}
}

知识点

主要是怎么判断若干个不同元素子数组。