门户网站建设费用,学校网站建设招聘,啥十小企业网站建设,青岛微信网站建设文章目录1. 题目2. 解题1. 题目
给你一个正整数数组 nums #xff0c;请你从中删除一个含有 若干不同元素 的子数组。 删除子数组的 得分 就是子数组各元素之 和 。
返回 只删除一个 子数组可获得的 最大得分 。
如果数组 b 是数组 a 的一个连续子序列#xff0c;即如果它…
文章目录1. 题目2. 解题1. 题目
给你一个正整数数组 nums 请你从中删除一个含有 若干不同元素 的子数组。 删除子数组的 得分 就是子数组各元素之 和 。
返回 只删除一个 子数组可获得的 最大得分 。
如果数组 b 是数组 a 的一个连续子序列即如果它等于 a[l],a[l1],…,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来源力扣LeetCode 链接https://leetcode-cn.com/problems/maximum-erasure-value 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。 2. 解题
先计算前缀和方便后面快速获取滑动窗口内的数字存入哈希set如果当前数字在set中则窗口左端点向右移动直至左端点该数字出现
class Solution {
public:int maximumUniqueSubarray(vectorint nums) {int ans 0, i 0, j 0, n nums.size();vectorint presum(nums);for(int i 1; i n; i) presum[i] presum[i-1];//前缀和unordered_setint s;while(j n){if(s.find(nums[j]) s.end()){s.insert(nums[j]);}else//存在nums[j]{while(nums[i] ! nums[j]){s.erase(nums[i]);}i;//左端点和nums[j]一样的数跳过了}ans max(ans, i0 ? presum[j]-presum[i-1] : presum[j]);j;}return ans;}
};720 ms 116.1 MB C 我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号Michael阿明一起加油、一起学习进步