2342. 数位和相等数对的最大和 --力扣 --JAVA

题目

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

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

解题思路

  1. 计算元素数位和;
  2. 将相同数位和的元素通过List进行记录;
  3. 对List进行排序,取最大的两个值记录;
  4. 返回最大值。

代码展示

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> data = new HashMap<>();
        for (int i = 0; i < nums.length; i++){
            int num = numSum(nums[i]);
            List temp = data.getOrDefault(num, new ArrayList<>());
            temp.add(nums[i]);
            data.put(num, temp);
        }
        int maxSum = -1;
        for (List 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;
    }
}

你可能感兴趣的:(力扣练习,算法,数据结构)