JZ42-和为S的两个数字
和为S的两个数字
https://www.nowcoder.com/practice/390da4f7a00f44bea7c2f3d19491311b?tpId=13&tags=&title=&diffculty=0&judgeStatus=0&rp=1&tab=answerKey
class Solution { public ArrayList<Integer> FindNumbersWithSum(int[] array, int sum) { ArrayList<Integer> list = new ArrayList<>(); if (array == null || array.length == 0) { return list; } for (int i = 0; i < array.length - 1; i++) { for (int j = i + 1; j < array.length; j++) { if (array[j] == sum - array[i]) { list.add(array[i]); list.add(array[j]); return list; } } } return list; } } class Solution2 { public ArrayList<Integer> FindNumbersWithSum(int[] array, int sum) { ArrayList<Integer> list = new ArrayList<>(); if (array == null || array.length == 0) { return list; } HashSet<Integer> set = new HashSet<>(); for (int a : array ) { set.add(a); } for (int i = 0; i < array.length - 1; i++) { if (set.contains(sum - array[i])) { list.add(array[i]); list.add(sum - array[i]); return list; } } return list; } } //二分查找 class Solution3 { public ArrayList<Integer> FindNumbersWithSum(int[] array, int sum) { ArrayList<Integer> list = new ArrayList<>(); if (array == null || array.length <= 1) { return list; } int left = 0; int right = array.length - 1; while (left < right) { if (array[left] + array[right] == sum) { list.add(array[left]); list.add(array[right]); return list; } if (array[left] + array[right] < sum) { left++; } else { right--; } } return list; } }