题目来源:
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
& 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;
- }
- };
总结:
无官方题解。