题目
给你一个正整数数组 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; } }
|
知识点
主要是怎么判断若干个不同元素的子数组。