给定一个升序排列的整数数组numbers ,从数组中找出两个数满足相加之和等于目标数 target。
假设每个输入只对应唯一的答案,而且不可以重复使用相同的元素。
返回两数的下标值,以数组形式返回
import java.lang.reflect.Array; import java.util.Arrays; public class searchTarget { public static void main(String[] args) { System.out.println(Arrays.toString(twoSearch(new int[]{1,4,6,7,8,20,21},7))); System.out.println(Arrays.toString(bf(new int[]{1,4,6,7,8,20,21},7))); System.out.println(Arrays.toString(twoPoin(new int[]{1,4,6,7,8,20,21},7))); } //暴力算法 public static int[] bf(int[] numbers,int target){ for (int i = 0; i <numbers.length ; i++) { int low =i, hight = numbers.length-1; for (int j = i+1; j <numbers.length ; j++) { if (numbers[i] + numbers[j] == target){ return new int[]{i,j}; } } } return null; } //二分查找数组中两个数是否大于target public static int[] twoSearch(int[] numbers,int target){ for (int i = 0; i < numbers.length; i++) { int low =i, hight = numbers.length-1; while(low <= hight){ int mid = low + (hight - low)/2; if (numbers[i] == target - numbers[mid]){ return new int[]{i,mid}; }else if(numbers[i] > target - numbers[mid]){ hight = mid -1; }else{ low = mid +1; } } } return new int[]{0}; } //双指针算法 public static int[] twoPoin(int[] numbers,int target){ int low = 0, hight = numbers.length-1; while(low<hight){ if (numbers[low] + numbers[hight] == target){ return new int[]{low,hight}; }else if (numbers[low] + numbers[hight] > target){ hight --; }else if (numbers[low] + numbers[hight] < target){ low --; } } return null; } }