一定要断点调试看看数据对不对的上!!!不然很容易弄不清楚值和下标
这个题意思是在nums中找出相同数位和的值
如 数位和为7
nums中符合要求的有 43,7
在这些数中选两个相加取最大值,再与其他数位和取得的相加最大值比较,最后返回最大的(看示例1)
我们先对整个数组排序
用unordered_map+vector把相同数位和的值统计在一块
如下图
7(数位和):
值:7,43
每个数位和为一类
在一类中取数组的最后两个值
再跟每一类比较即可。
代码如下
class Solution {
public:
int cdigit(int n)
{
int ans = 0;
while (n > 0)
{
ans += n % 10;
n /= 10;
}
return ans;
}
int maximumSum(vector<int>& nums)
{
sort(nums.begin(), nums.end());
unordered_map<int,vector<int>>my_map;
for (int i=0;i<nums.size();i++)
{
int t=cdigit(nums[i]);
my_map[t].push_back(nums[i]);
}
int ans = -1;
for (auto n : my_map)
{
vector<int>& a = n.second;
if (a.size() < 2)
continue;
ans = max(ans, (a[a.size() - 1] + a[a.size() - 2]));
}
return ans;
}
};