题目来源:
leetcode题目,网址:2342. 数位和相等数对的最大和 - 力扣(LeetCode)
解题思路:
哈希表,根据数位和分组后,计算每组中最大两个数之和,然后返回最大值即可。
解题代码:
class Solution {
public:
int maximumSum(vector<int>& nums) {
int res=-1;
unordered_map<int,vector<int>> map=getSumOfDigits(nums);
for(auto it=map.begin();it!=map.end();it++){
if(it->second.size()!=2){
continue;
}
res=max(it->second[0]+it->second[1],res);
}
return res;
}
unordered_map<int,vector<int>> getSumOfDigits(vector<int>& nums){
unordered_map<int,vector<int>> res; //保存最大的两个数,最大,次大
for(int num:nums){
int sum=getSumOfDigit(num);
vector<int> temp=res[sum];
if(temp.size()==0){
temp.push_back(num);
}else if(temp.size()==1){
int bigger=max(temp[0],num);
int smaller=min(temp[0],num);
temp[0]=bigger;
temp.push_back(smaller);
}else{
if(num>=temp[0]){
temp[1]=temp[0];
temp[0]=num;
}else if(num>temp[1]){
temp[1]=num;
}
}
res[sum]=temp;
}
return res;
}
int getSumOfDigit(int num){
int res=0;
while(num!=0){
res+=(num%10);
num=num/10;
}
return res;
}
};
总结:
无官方题解。