1695. Maximum Erasure Value

Leetcode link

解题思路

题目要求我们求一个正整数数组 nums 的累加和最大的无重复元素的连续子数组,返回其累加和的值

因为要求连续子数组,所以我们优先考虑滑动窗口的方式

另外,我们可以用一个集合来记录当前窗口内已有的元素,如果出现了重复元素,则将窗口内该元素包含之前的元素全部清理出窗口外

我们记录下每个符合条件的窗口累加和,最后再取最大值就是题目所求了

C++

class Solution {
public:
    int maximumUniqueSubarray(vector<int>& nums) {
        int left = 0, right = 0;
        int res = -1;
        int sum = 0;
        unordered_set<int> set;
        int len = nums.size();

        while(right < len) {
            sum += nums[right];
            while(set.count(nums[right]) != 0) {
                sum -= nums[left];
                set.erase(nums[left]);
                left++;
            }
            set.insert(nums[right]);
            res = max(res, sum);
            right++;
        }

        return res;

    }
};

Javascript

/**
 * @param {number[]} nums
 * @return {number}
 */
var maximumUniqueSubarray = function(nums) {
    let left = 0, right = 0;
    let set = new Set();
    let res = -1;
    let sum = 0;
    let len = nums.length;
    while(right < len) {
        sum += nums[right];
        while(set.has(nums[right])) {
            sum -= nums[left];
            set.delete(nums[left]);
            left++;
        }
        set.add(nums[right]);
        res = Math.max(res, sum);
        right++;
    }

    return res;
};

results matching ""

    No results matching ""