方法1:暴力解
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
int i=0,j=0;
for(i=0;i<numsSize;i++){
for(j=i+1;j<numsSize;j++){
if(nums[i]+nums[j]==target){
int *ret=(int*)malloc(sizeof(int)*2);
ret[0]=i;
ret[1]=j;
*returnSize=2;
return ret;
}
}
}
*returnSize=0;
return NULL;
}
方法2:二分查找
int* twoSum(int* numbers, int numbersSize, int target, int* returnSize){
int i=0;
for(i=0;i<numbersSize;i++){
int low=i+1,high=numbersSize-1;//low从a[1]开始
while(low<=high){
int mid=(low+high)/2;
if(numbers[i]+numbers[mid]==target){//用二分查找找右边元素
*returnSize=2;
int *ret=(int*)malloc(sizeof(int)*2);
ret[0]=i+1;
ret[1]=mid+1;
return ret;
}
if(numbers[i]+numbers[mid]>target){
high=mid-1;
}
else{
low=mid+1;
}
}
}
*returnSize=0;
return NULL;
}
方法3:双指针
int* twoSum(int* numbers, int numbersSize, int target, int* returnSize){
int i=0,j=numbersSize-1;
while (i<=j) {
if (numbers[i]+numbers[j]==target) {
int *ret=(int*)malloc(sizeof(int)*2);
ret[0]=i+1;
ret[1]=j+1;
*returnSize=2;
return ret;
} else if (numbers[i]+numbers[j]<target) {
i++;
} else {
j--;
}
}
*returnSize=0;
return NULL;
}