classSolution{publicint[]twoSum(int[] numbers,int target){int n = numbers.length;for(int i =0; i < n; i++){for(int j = i+1; j < n; j++){if(numbers[i]+ numbers[j]== target)returnnewint[]{i+1,j+1};}}returnnewint[0];}}
时间复杂度为 O(N2)
空间复杂度为 O(1)
二分法改进
classSolution{publicint[]twoSum(int[] numbers,int target){int n = numbers.length;for(int i =0; i < n; i++){int l = i +1, r = n-1, mid;while(l <= r){
mid =(l + r)/2;if(numbers[mid]== target - numbers[i])returnnewint[]{ i +1, mid +1};elseif(numbers[mid]< target - numbers[i])
l = mid +1;else
r = mid -1;}}returnnewint[0];}}
时间复杂度为 O(NlogN)
空间复杂度为 O(1)
左右指针
classSolution{publicint[]twoSum(int[] numbers,int target){int n = numbers.length, l =0, r = n -1, sum;while(l < r){
sum = numbers[l]+ numbers[r];if(sum == target)returnnewint[]{ l +1, r +1};if(sum < target)
l++;if(sum > target)
r--;}returnnewint[0];}}