题主原代码,暴力求解,解题思路:遍历求出每个数数位和,按照排序思路找出相等数对,再求和
class Solution {
public:
int maximumSum(vector<int>& nums) {
int len = nums.size();
int i,j,biteSum,max=-1;
int sum[len];
for(i=0;i<len;i++){
j=nums[i];
while(j!=0){
biteSum+=(j%10);
j=j/10;
}
sum[i]=biteSum;
biteSum=0;
//cout<< "sum["<<i<<"]"<<sum[i]<<endl;
}
for(i=0;i<len;i++){
for(j=i+1;j<len;j++){
if(sum[i]==sum[j]){
if(max<nums[i]+nums[j])
max=nums[i]+nums[j];
}
}
}
return max;
}
};
71/83通过,超出时间限制
借鉴一下大佬的思路:哈希
class Solution {
public:
int sum(int x){
int s=0;
while(x){
s+=x%10;
x/=10;
}
return s;
}
int maximumSum(vector<int>& nums) {
int mx=-1;
unordered_map<int, vector<int>> M;
for(auto &x:nums){
int s = sum(x);
if(M.count(s)==0)
M[s]={x,0};
else{
auto &v = M[s];
if(x>=v[0])
v= {x,v[0]};
else if(x>v[1])
v[1]=x;
mx=max(mx,v[0]+v[1]);
}
}
return mx;
}
};