2342-数位和相等数对的最大和

Raphael Liu Lv10

给你一个下标从 0 开始的数组 nums ,数组中的元素都是 整数。请你选出两个下标 iji != j),且
nums[i] 的数位和 与 nums[j] 的数位和相等。

请你找出所有满足条件的下标 ij ,找出并返回 __nums[i] + nums[j] __ 可以得到的 最大值

示例 1:

**输入:** nums = [18,43,36,13,7]
**输出:** 54
**解释:** 满足条件的数对 (i, j) 为:
- (0, 2) ,两个数字的数位和都是 9 ,相加得到 18 + 36 = 54 。
- (1, 4) ,两个数字的数位和都是 7 ,相加得到 43 + 7 = 50 。
所以可以获得的最大和是 54 。

示例 2:

**输入:** nums = [10,12,19,14]
**输出:** -1
**解释:** 不存在满足条件的数对,返回 -1 。

提示:

  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 109

本题 视频讲解 已出炉,欢迎点赞三连~


[sol1-Python3]
1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution:
def maximumSum(self, nums: List[int]) -> int:
ans = -1
mx = defaultdict(int)
for num in nums:
# s = sum(int(d) for d in str(num))
s, x = 0, num
while x:
s += x % 10
x //= 10
if s in mx: ans = max(ans, mx[s] + num)
mx[s] = max(mx[s], num)
return ans
[sol1-Go]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
func maximumSum(nums []int) int {
ans := -1
mx := map[int]int{}
for _, v := range nums {
s := 0
for x := v; x > 0; x /= 10 {
s += x % 10
}
if mx[s] > 0 {
ans = max(ans, mx[s] + v)
}
mx[s] = max(mx[s], v)
}
return ans
}

func max(a, b int) int { if b > a { return b }; return a }
 Comments
On this page
2342-数位和相等数对的最大和