博客主页:Skylar Lin
望本文能够给您带来一定的帮助,如果有错误的地方敬请斧正!
新人博主🧑,希望多多支持🍺,还有好多库存和大家分享🎁。
转载需注明出处和原作🌹。
力扣链接:https://leetcode.cn/problems/max-pair-sum-in-an-array/
题目描述
给你一个下标从 0 开始的整数数组 nums
。请你从 nums
中找出和 最大 的一对数,且这两个数数位上最大的数字相等。
返回最大和,如果不存在满足题意的数字对,返回 -1
。
示例:
输入:nums = [51,71,17,24,42]
输出:88
解释:
i = 1 和 j = 2 ,nums[i] 和 nums[j] 数位上最大的数字相等,且这一对的总和 71 + 17 = 88 。
i = 3 和 j = 4 ,nums[i] 和 nums[j] 数位上最大的数字相等,且这一对的总和 24 + 42 = 66 。
可以证明不存在其他数对满足数位上最大的数字相等,所以答案是 88 。
思路及解析
我们在遍历数组的时候,可以找到每个数字的最大数位,使用哈希表存储这个数位,以及该数位对应的最大数字;
同时,如果哈希表中已经存在这个数位对应的数字,我们就计算对数和,记录最大对数和。
class Solution {
public:
int maxSum(vector<int>& nums) {
int ret = -1;
unordered_map<int, int> mp;
for(int num : nums){
int maxDigit = getMaxDigit(num);
if(mp.count(maxDigit)){
ret = max(ret, mp[maxDigit] + num);
mp[maxDigit] = max(mp[maxDigit], num);
} else {
mp[maxDigit] = num;
}
}
return ret;
}
private:
int getMaxDigit(int num) {
int maxDigit = 0;
while (num) {
maxDigit = max(maxDigit, num % 10);
num /= 10;
}
return maxDigit;
}
};