leetcode 3487. 删除后的最大子数组元素和 简单
给你一个整数数组 nums
。
你可以从数组 nums
中删除任意数量的元素,但不能将其变为 空 数组。执行删除操作后,选出 nums
中满足下述条件的一个子数组:
- 子数组中的所有元素 互不相同 。
- 最大化 子数组的元素和。
返回子数组的 最大元素和 。
子数组 是数组的一个连续、非空 的元素序列。
示例 1:
输入:nums = [1,2,3,4,5]
输出:15
解释:
不删除任何元素,选中整个数组得到最大元素和。
示例 2:
输入:nums = [1,1,0,1,1]
输出:1
解释:
删除元素 nums[0] == 1
、nums[1] == 1
、nums[2] == 0
和 nums[3] == 1
。选中整个数组 [1]
得到最大元素和。
示例 3:
输入:nums = [1,2,-1,-2,1,0,-1]
输出:3
解释:
删除元素 nums[2] == -1
和 nums[3] == -2
,从 [1, 2, 1, 0, -1]
中选中子数组 [2, 1]
以获得最大元素和。
提示:
1 <= nums.length <= 100
-100 <= nums[i] <= 100
分析:计算所有大于等于 0 的数字之和返回,如果所有数字都小于 0,则返回最大的负数。
int maxSum(int* nums, int numsSize) {int flag[110]={0};int ans=0,maxn=-200,f=0;for(int i=0;i<numsSize;++i){if(nums[i]>=0&&flag[nums[i]]==0)ans+=nums[i],flag[nums[i]]=1,f=1;else if(nums[i]<0)maxn=fmax(nums[i],maxn);}if(f)return ans;return maxn;
}