1.暴力解法
//two sum #include <iostream> using namespace std; int* twoSum(int* nums, int numsSize, int target){ int *p0 = (int*) malloc(sizeof(int)*2); //int *p0 = new int [2]; for (int i=0;i<numsSize-1;i++){ for(int j=i+1;j<numsSize;j++){ if (nums[i]+nums[j]==target){ p0[0]=i;p0[1]=j; return p0; } } } p0[0]=p0[1]=-1; return p0; } int main(){ int nums[4]={2,7,11,15}; int target = 9; int *p; p = twoSum(nums,sizeof(nums)/sizeof(nums[0]),target); cout<<"第"<<p[0]+1<<"and"<<"第"<<p[1]+1<<"个元素"<<endl; return 0; }
2.用二分搜索优化
//two sum #include <iostream> using namespace std; //时间复杂度O(logn + n) = O(logn) int* twoSum(int* nums, int numsSize, int target){ int left = 0;int right = numsSize - 1; int *p0 = (int *) malloc(sizeof(int)*2); while(left<right){ if(nums[left]+nums[right]==target){ p0[0]=left; p0[1]=right; return p0; }else if(nums[left]+nums[right]>target){ right--; }else{ left++; } } p0[0]=p0[1]=-1; return p0; } int main(){ int nums[4]={2,7,11,15}; int target = 9; int *p; p = twoSum(nums,sizeof(nums)/sizeof(nums[0]),target); cout<<"第"<<p[0]+1<<"and"<<"第"<<p[1]+1<<"个元素"<<endl; return 0; }