You are given a 0-indexed array nums
consisting of positive integers. You can choose two indices i
and j
, such that i != j
, and the sum of digits of the number nums[i]
is equal to that of nums[j]
.
Return the maximum value of nums[i] + nums[j]
that you can obtain over all possible indices i
and j
that satisfy the conditions.
Example 1:
Input: nums = [18,43,36,13,7] Output: 54 Explanation: The pairs (i, j) that satisfy the conditions are: - (0, 2), both numbers have a sum of digits equal to 9, and their sum is 18 + 36 = 54. - (1, 4), both numbers have a sum of digits equal to 7, and their sum is 43 + 7 = 50. So the maximum sum that we can obtain is 54.
Example 2:
Input: nums = [10,12,19,14] Output: -1 Explanation: There are no two numbers that satisfy the conditions, so we return -1.
Constraints:
1 <= nums.length <= 105
1 <= nums[i] <= 109
Companies: Amazon
Related Topics:
Array, Hash Table, Sorting, Heap (Priority Queue)
// OJ: https://leetcode.com/problems/max-sum-of-a-pair-with-equal-sum-of-digits
// Author: github.com/lzl124631x
// Time: O(NlgD) where D is the range of numbers
// Space: O(N)
class Solution {
int sumDigits(int n) {
int ans = 0;
while (n) {
ans += n % 10;
n /= 10;
}
return ans;
}
public:
int maximumSum(vector<int>& A) {
unordered_map<int, priority_queue<int, vector<int>, greater<>>> m;
for (int n : A) {
auto &pq = m[sumDigits(n)];
pq.push(n);
if (pq.size() > 2) pq.pop();
}
int ans = -1;
for (auto &[_, pq] : m) {
if (pq.size() != 2) continue;
int sum = pq.top();
pq.pop();
ans = max(ans, sum + pq.top());
}
return ans;
}
};