1、题目:点击打开链接
2、下面代码是暴力破解,超时无法通过:
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* numbers, int numbersSize, int target, int* returnSize) {
int i,j,flag=0;
for(i=0;i<numbersSize;i++){
scanf("%d",&numbers[i]);
}
scanf("%d",&target);
for(i=0;i<numbersSize-1;i++){
for(j=i+1;j<numbersSize;j++){
if(numbers[i]+numbers[j]==target){
flag=1;
break;
}
}
if(flag==1)
break;
}
*returnSize=2;
int* result=(int*)malloc(sizeof(int)*2);
result[0]=i+1;
result[1]=j+1;
//printf("%d\n%d\n",i,j);
return result;
}
3、改进版本之1(未考虑到负数的情况,依旧未通过):
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* numbers, int numbersSize, int target, int* returnSize) {
int i,j,k,flag=0;
for(i=0;i<numbersSize;i++){
scanf("%d",&numbers[i]);
}
scanf("%d",&target);
for(i=numbersSize-1;i>0;i--){
if(numbers[i]<=target)
break;
}
for(;i>0;i--){
for(j=i-1;j>=0;j--){
if(numbers[i]+numbers[j]==target){
flag=1;
break;
}
}
if(flag==1)
break;
}
*returnSize=2;
int* result=(int*)malloc(sizeof(int)*2);
result[0]=j+1;
result[1]=i+1;
printf("%d\n%d\n",i,j);
return result;
}
4、通过的版本:
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* numbers, int numbersSize, int target, int* returnSize) {
int i,j,k,flag=0;
for(i=0;i<numbersSize;i++){
scanf("%d",&numbers[i]);
}
scanf("%d",&target);
i=0,j=numbersSize-1;
while(numbers[i]+numbers[j]!=target){
if(numbers[i]+numbers[j]>target)
j--;
else
i++;
}
*returnSize=2;
int* result=(int*)malloc(sizeof(int)*2);
result[0]=i+1;
result[1]=j+1;
printf("%d\n%d\n",i,j);
return result;
}