2342. 数位和相等数对的最大和 --力扣 --JAVA
题目
给你一个下标从 0 开始的数组
nums
,数组中的元素都是 正 整数。请你选出两个下标i
和j
(i != j
),且nums[i]
的数位和 与nums[j]
的数位和相等。请你找出所有满足条件的下标
i
和j
,找出并返回nums[i] + nums[j]
可以得到的 最大值 。
解题思路
- 计算元素数位和;
- 将相同数位和的元素通过List进行记录;
- 对List进行排序,取最大的两个值记录;
- 返回最大值。
代码展示
public class Two {
public static void main(String[] args) {
Two two = new Two();
System.out.println(two.maximumSum(new int[]{18,43,36,13,7}));
System.out.println(two.maximumSum(new int[]{10,12,19,14}));
}
public int maximumSum(int[] nums) {
Map<Integer, List<Integer>> data = new HashMap<>();
for (int i = 0; i < nums.length; i++){
int num = numSum(nums[i]);
List<Integer> temp = data.getOrDefault(num, new ArrayList<>());
temp.add(nums[i]);
data.put(num, temp);
}
int maxSum = -1;
for (List<Integer> list : data.values()){
int size = list.size();
if(size < 2){
continue;
}
Collections.sort(list);
maxSum = Math.max(maxSum, list.get(size - 1) + list.get(size - 2));
}
return maxSum;
}
public int numSum(int num){
int sum = 0;
while (num > 0){
sum += num % 10;
num = num / 10;
}
return sum;
}
}