- 🧩 Problem link: Leetcode
- 🚦 Difficulty: 🟢 Easy
-
Initialize:
unordered_set<int> set— to track unique elements.sum = 0— total sum of unique positive integers.negative = INT_MIN— keeps track of the largest negative number seen.
-
Iterate through
nums:-
If
nis not in the set:- Add
nto the set. - If
n <= 0→ updatenegativewithmax(negative, n). - If
n > 0→ add tosum.
- Add
-
-
Return result:
- If no positive numbers were added (i.e.
sum == 0) and there were negative numbers → returnnegative. - Otherwise → return
sum.
- If no positive numbers were added (i.e.
- Handles duplicates using the set.
- Handles all-negative arrays by returning the least negative value instead of 0.
- Time: O(n)
- Space: O(n)
class Solution {
public:
int maxSum(vector<int>& nums) {
unordered_set<int> set;
int sum = 0, negative = INT_MIN;
for (int n : nums) {
if (!set.count(n)) {
set.insert(n);
if (n <= 0) {
negative = max(negative, n);
} else {
sum += n;
}
}
}
return negative != INT_MIN && sum == 0 ? negative : sum;
}
};