Skip to content

Latest commit

 

History

History

2342

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

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)

Solution 1.

// 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;
    }
};