Welcome to Subscribe On Youtube
Formatted question description: https://leetcode.ca/all/2342.html
2342. Max Sum of a Pair With Equal Sum of Digits
- Difficulty: Medium.
- Related Topics: Array, Hash Table, Sorting, Heap (Priority Queue).
- Similar Questions: .
Problem
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
Solution (Java, C++, Python)
-
class Solution { public int maximumSum(int[] nums) { Map<Integer, Integer> map = new HashMap<>(); int res = -1; for (int num : nums) { int s = 0; for (char digit : String.valueOf(num).toCharArray()) { s += Integer.valueOf(digit - '0'); } if (!map.containsKey(s)) { map.put(s, num); } else { res = Math.max(res, map.get(s) + num); map.put(s, Math.max(map.get(s), num)); } } return res; } } ############ class Solution { public int maximumSum(int[] nums) { int ans = -1; int[] d = new int[100]; for (int v : nums) { int y = 0; for (int x = v; x > 0; x /= 10) { y += x % 10; } if (d[y] > 0) { ans = Math.max(ans, d[y] + v); } d[y] = Math.max(d[y], v); } return ans; } }
-
class Solution: def maximumSum(self, nums: List[int]) -> int: ans = -1 d = defaultdict(int) for v in nums: x, y = v, 0 while x: y += x % 10 x //= 10 if y in d: ans = max(ans, d[y] + v) d[y] = max(d[y], v) return ans ############ # 2342. Max Sum of a Pair With Equal Sum of Digits # https://leetcode.com/problems/max-sum-of-a-pair-with-equal-sum-of-digits/ class Solution: def maximumSum(self, nums: List[int]) -> int: n = len(nums) cnt = defaultdict(list) for x in nums: cnt[sum(int(k) for k in str(x))].append(x) res = -1 for values in cnt.values(): if len(values) >= 2: values.sort() res = max(res, values[-1] + values[-2]) return res
-
class Solution { public: int maximumSum(vector<int>& nums) { vector<vector<int>> d(100); for (int& v : nums) { int y = 0; for (int x = v; x > 0; x /= 10) { y += x % 10; } d[y].emplace_back(v); } int ans = -1; for (auto& vs : d) { if (vs.size() > 1) { sort(vs.rbegin(), vs.rend()); ans = max(ans, vs[0] + vs[1]); } } return ans; } };
-
func maximumSum(nums []int) int { ans := -1 d := [100]int{} for _, v := range nums { y := 0 for x := v; x > 0; x /= 10 { y += x % 10 } if d[y] > 0 { ans = max(ans, d[y]+v) } d[y] = max(d[y], v) } return ans } func max(a, b int) int { if a > b { return a } return b }
-
function maximumSum(nums: number[]): number { const d: number[] = Array(100).fill(0); let ans = -1; for (const v of nums) { let x = 0; for (let y = v; y; y = (y / 10) | 0) { x += y % 10; } if (d[x]) { ans = Math.max(ans, d[x] + v); } d[x] = Math.max(d[x], v); } return ans; }
-
impl Solution { pub fn maximum_sum(nums: Vec<i32>) -> i32 { let mut d = vec![0; 100]; let mut ans = -1; for &v in nums.iter() { let mut x: usize = 0; let mut y = v; while y > 0 { x += (y % 10) as usize; y /= 10; } if d[x] > 0 { ans = ans.max(d[x] + v); } d[x] = d[x].max(v); } ans } }
Explain:
nope.
Complexity:
- Time complexity : O(n).
- Space complexity : O(n).