题目:3487. 删除后的最大子数组元素和
思路:哈希表,时间复杂度0(n)。
维护数组nums的最大值mx,同时用哈希表mp维护数组中非负数出现的情况,记录非负数的和sum。如果哈希表mp的大小为0,那么数组nums都是负数,返回最大值mx即可。否则返回sum
C++版本:
class Solution {
public:int maxSum(vector<int>& nums) {unordered_map<int,int> mp;int sum=0,mx=INT_MIN;for(auto x:nums){if(x<0){mx=max(mx,x);}else{mp[x]++;if(mp[x]==1) sum+=x;}}return mp.size()>0 ? sum:mx;}
};
JAVA版本:
class Solution {public int maxSum(int[] nums) {Map<Integer,Integer> mp=new HashMap<>();int sum=0,mx=Integer.MIN_VALUE;for(var x:nums){if(x<0){mx=Math.max(mx,x);}else{mp.merge(x,1,Integer::sum);if(mp.get(x)==1) sum+=x;}}return mp.size()>0 ? sum:mx;}
}
GO版本:
func maxSum(nums []int) int {mp:=map[int]int{}sum,mx:=0,math.MinIntfor _,x:=range nums {if x<0 {mx=max(mx,x)}else{mp[x]++if mp[x]==1 {sum+=x}}}if len(mp)>0 {return sum}return mx
}