解法1:
暴力枚举,虽然过了,但是时间复杂度很高
int* twoSum(int* numbers, int numbersSize, int target, int* returnSize){
int*arr=(int*)malloc(sizeof(int)*2);
*returnSize=2;
int flag=0;
for(int i=0;i<numbersSize-1;i++){
arr[0]=i+1;
for(int j=i+1;j<numbersSize;j++){
if(numbers[i]+numbers[j]==target){
arr[1]=j+1;
flag=1;
break;
}
}
if(flag)
break;
}
return arr;
}
解法2:
因为数组已排序,所以可以使用一个指针指前一个指后,通过和的大小可判断需要对前后指针如何进行操作。
int* twoSum(int* numbers, int numbersSize, int target, int* returnSize){
int i=0,j=numbersSize-1;
*returnSize=2;
while(i<j){
if(numbers[i]+numbers[j]==target)
break;
else if(numbers[i]+numbers[j]<target)
i++;
else j--;
}
int*arr=(int*)malloc(sizeof(int)*2);
arr[0]=i+1;
arr[1]=j+1;
return arr;
}
带带大程序员
发布了8 篇原创文章 · 获赞 0 · 访问量 285
私信
关注