題目: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
}