#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;
}```