【哈希表+排序】先对数组从大到小排序,然后用哈希表存具有相同数位和的数。由于之前已经排好序,所以最顶上两个数的和必然是该数位和所能达到的最大值。
class Solution {
// 排序 + 哈希表
public int maximumSum(int[] nums) {
nums = Arrays.stream(nums).boxed().sorted((a, b) -> b - a).mapToInt(x -> x).toArray();
Map<Integer, List<Integer>> map = new HashMap();
for (var num: nums) {
int t = 0, x = num;
while (x > 0) {
t += x % 10;
x /= 10;
}
map.computeIfAbsent(t, k -> new ArrayList<Integer>()).add(num);
}
int ans = -1;
for (var x: map.keySet()) {
List<Integer> list = map.get(x);
if (list.size() < 2) continue;
int sum = list.get(0) + list.get(1);
ans = Math.max(sum, ans);
}
return ans;
}
}