两数之和
描述
给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。
你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 0 到 n-1。
你可以假设只有一组答案。
样例
Example1: 给出 numbers = [2, 7, 11, 15], target = 9, 返回 [0, 1]. Example2: 给出 numbers = [15, 2, 7, 11], target = 9, 返回 [1, 2].
挑战
给自己加点挑战
- O(n)O(n) 空间复杂度,O(nlogn)O(nlogn) 时间复杂度,
- O(n)O(n) 空间复杂度,O(n)O(n) 时间复杂度,
java解决方案:
public class Demo4 { public static void main(String[] args) { int[] numbers = {5, 8, 2, 3, 7, 11}; int target = 9; twoSum(numbers, target); } /** * @param numbers: An array of Integer * @param target: target = numbers[index1] + numbers[index2] * @return: [index1 + 1, index2 + 1] (index1 < index2) */ public static int[] twoSum(int[] numbers, int target) { // write your code here for (int i = 0; i < numbers.length; i++) { int j = find(numbers, i + 1, numbers.length - 1, target - numbers[i]); if (i < j) { return new int[]{i, j}; } } return new int[]{-1, -1}; } /** * @param numbers : An array of Integer * @param s start index * @param e end index * @param c difference * @return */ public static int find(int[] numbers, int s, int e, int c) { if (s > e) return -1; if (numbers[e] == c) { return e; } else if (numbers[s] == c) { return s; } else { return find(numbers, s + 1, e - 1, c); } } }

浙公网安备 33010602011771号