URL:https://www.lintcode.com/problem/maximum-sum-of-two-numbers/description
描述
给定一个由N个整数组成的数组A,返回两个数字的最大总和,规定这两个数的所有位加起来相等。 如果没有两个数字的各个位相加和相等,则该函数应返回-1。
- N的范围是 [1, 200000]
- A中的每一个参数的范围是 [1, 1000000000]
样例
示例1:
输入:
A = [51, 71, 17, 42]
输出: 93
解释:这里有两对各个位相加和相等的数:(51, 42) 和 (17,71),第一对的和是93
示例2:
输入:
A = [42, 33, 60]
输出: 102
解释:所有的数各个位相加的和都相等,选择42 + 60 = 102
示例3:
输入:
A = [51, 32, 43]
输出: -1
解释: 所有数的各个位相加和都不一样,因此返回-1
在代码段中添加:
int n[200010]={0};
vector<int> B = A;
int count = A.size();
int sum = -1;
for (int i = 0; i <count; i++) {
/* code */
while(A[i]/10!=0){
n[i]+=A[i]%10;
A[i]/=10;
}
n[i]+=A[i];
}
for (int i = 0; i < count-1; i++) {
/* code */
for (int j = i+1; j < count; j++) {
/* code */
if(n[i]==n[j]){
if(sum<B[i]+B[j]){
sum = B[i]+B[j];
}
}
}
}
return sum;
即可: