1695.删除子数组的最大得分


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

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= nums.length <= 10^5
  • 1 <= nums[i] <= 10^4
class Solution {
    public int maximumUniqueSubarray(int[] nums) {
        //找到最大,且不含重复数字的子数组,计算得到子数组的结果.
        int length = nums.length;
        int sum = 0;
        int result = 0;
        Set<Integer> set = new HashSet<>();

        int l = 0;
        int r = 0;
        for(; r < length ; r++){
            if(!set.contains(nums[r])){
                sum += nums[r];
            } else {
                while(true){
                    if(!set.contains(nums[r])){
                        sum += nums[r];
                        break;
                    }
                    sum -= nums[l];
                    set.remove(nums[l]);
                    l++;
                }
            }
            set.add(nums[r]);
            result = Math.max(sum,result);
        }
        return result;

    }
}

文章作者: 冯廷鑫
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 冯廷鑫 !
  目录