2815. 数组中的最大数对和

keybot
0
2025-08-20

#easy
给你一个下标从 0 开始的整数数组 nums 。请你从 nums 中找出和 最大 的一对数,且这两个数数位上最大的数字相等。

返回最大和,如果不存在满足题意的数字对,返回 -1 。

提示:

  • 2 <= nums.length <= 100
  • 1 <= nums[i] <= 104

思路:
用一个长为 10 的数组 a[i] 维护最大数位为 i 的元素的最大值。

当我们遍历到 nums[i] 时,设其最大数位为 x,那么用

$$Nums[i]+a[x]$$
更新答案。

int findMax(int x) {
    int max = 0;
    while (x != 0) {
        if (x % 10 > max)
            max = x % 10;
        x /= 10;
    }
    return max;
}

int maxSum(int* nums, int numsSize) {
    int a[10] = {INT_MIN, INT_MIN, INT_MIN, INT_MIN, INT_MIN,
                 INT_MIN, INT_MIN, INT_MIN, INT_MIN, INT_MIN};
    int ans = -1;
    for (int i = 0; i < numsSize; i++) {
        int x = findMax(nums[i]);
        printf("%d\n", a[x]);
        ans = ans < a[x] + nums[i] ? a[x] + nums[i] : ans;
        printf("%d\n", ans);
        a[x] = a[x] < nums[i] ? nums[i] : a[x];
    }
    return ans < 0 ? -1 : ans;
}```