【leetcode系列】Two Sum

来源:互联网 发布:java俄罗斯方块代码 编辑:程序博客网 时间:2024/06/18 04:33

解法一,我自己想的,有点弱,时间复杂度O(n^2)。

public class Solution {public int[] twoSum(int[] numbers, int target) {int[] result = new int[2];for (int i = 0; i < numbers.length; i++) {for (int j = i + 1; j < numbers.length; j++) {if (numbers[i] + numbers[j] == target) {result[0] = i;result[1] = j;}}}if (result[0] == 0) {if (result[1] != 1) {int tmp = numbers[0];numbers[0] = numbers[1];numbers[1] = tmp;result[0] = 1;} else {int tmp = numbers[1];numbers[1] = numbers[2];numbers[2] = tmp;result[1] = 2;tmp = numbers[0];numbers[0] = numbers[1];numbers[1] = tmp;result[0] = 1;}}return result;}public void arrayPrint(int[] array) {for (int i = 0; i < array.length; i++) {System.out.print(array[i] + " ");}System.out.println();}public static void main(String[] args) {int[] numbers = { 11, -22, 12, 7, 2 };int target = 9;Solution mSolution = new Solution();mSolution.arrayPrint(numbers);int[] result = mSolution.twoSum(numbers, target);mSolution.arrayPrint(result);mSolution.arrayPrint(numbers);}}

解法二,网上大牛的,点击打开链接,很巧妙,用java的hashtable,典型的空间换时间,时间复杂度O(n),但是要满足下标的要求,必须在找出满足条件的数字后再重新排个序,下面是我稍微修改的代码:

public int[] twoSum_2(int[] numbers, int target) {int[] result = new int[2];HashMap<Integer, Integer> hm = new HashMap<Integer, Integer>();for(int i = 0; i < numbers.length; i++) {if(hm.get(target - numbers[i]) != null) {result[0] = hm.get(target - numbers[i]);result[1] = i;} else {hm.put(numbers[i], i);}}if (result[0] == 0) {if (result[1] != 1) {int tmp = numbers[0];numbers[0] = numbers[1];numbers[1] = tmp;result[0] = 1;} else {int tmp = numbers[1];numbers[1] = numbers[2];numbers[2] = tmp;result[1] = 2;tmp = numbers[0];numbers[0] = numbers[1];numbers[1] = tmp;result[0] = 1;}}return result;}



0 0
原创粉丝点击