
思路:滑动窗口 + 哈希表
- 此题等于在问:不重复子数组的最大和是多少
- 哈希表不一定快,自己可以写一个record数组
- 两个指针,同时从0出发,如果发现右边指针指向的数字已经在rec中了,那么就不断移动左边的指针,直到右边的数字不在rec中。然后,插入右边的数字,不断更新,得到需要的数值。
class Solution {public: int maximumUniqueSubarray(vector<int>& nums) { int max_val = 0, cur_val = 0; int len_nums = nums.size(); unordered_set<int> rec_nums; for (int left = 0, right = 0; right < len_nums; ) { while(rec_nums.count(nums[right])) { cur_val -= nums[left]; rec_nums.erase(nums[left++]); } rec_nums.insert(nums[right]); cur_val += nums[right]; max_val = max(max_val, cur_val); ++right; } return max_val; }};