
public class Test { public static void main(String[] args) { System.out.println(Arrays.toString(twoSeach(new int[]{1,2,3,4,5,6},10))); System.out.println(Arrays.toString(twoPoint(new int[]{1,2,3,4,5,6},10))); } /** * 双指针,时间复杂度O(n),空间复杂度O(1) * @param arr * @param target * @return */ private static int[] twoPoint(int[] arr, int target) { int left = 0, right = arr.length - 1; while (left < right) { if (arr[left] + arr[right] == target) { return new int[]{left, right}; } else if (arr[left] + arr[right] > target){ right--; } else { left++; } } return new int[]{0}; } /** * 二分查找 * @param arr * @param target * @return */ private static int[] twoSeach(int[] arr, int target) { // 二分查找法,先循环固定一个值 for (int i = 0; i < arr.length; i++) { // 起始指针每次循环+1 int start = i,end = arr.length - 1; while (start <= end) { int middle = start + (end - start)/2; if (arr[middle] == target - arr[i]) { return new int[]{i, middle}; } else if (arr[middle] > target - arr[i]){ end = middle - 1; } else { start = middle + 1; } } } return new int[]{0}; }}