Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1]. 我的代码: public int[] twoSum(int[] nums, int target) { int[] sum=new int[2]; int i=nums.length; for(int j=0;j<i;j++){ for(int k=j+1;k<i;k++){ if (nums[j]+nums[k]==target){ sum[0]=j; sum[1]=k; } } }return sum; } Approach #1 (Brute Force) public int[] twoSum(int[] nums, int target) { for (int i = 0; i < nums.length; i++) { //不用创建变量,直接使用,简洁 for (int j = i + 1; j < nums.length; j++) { if (nums[j] == target - nums[i]) {//利用减法,而不是利用加法,因为i是不变的。 return new int[] { i, j }; //用的时候再进行创建,不需要提前创建 } } } throw new IllegalArgumentException("No two sum solution");//不需要再写返回语句。 }Approach #2 (Two-pass Hash Table)
//没怎么看明白啊???
public int[] twoSum(int[] nums, int target) { //创建map容器.http://www.cnblogs.com/chenssy/p/3521565.html Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < nums.length; i++) { map.put(nums[i], i);//put<key,value> } for (int i = 0; i < nums.length; i++) { int complement = target - nums[i]; //containKey(key),看complement是否存在在map中,blooen型。 //get(key),将key对应的value的值取出来。 if (map.containsKey(complement) && map.get(complement) != i) { return new int[] { i, map.get(complement) }; } } throw new IllegalArgumentException("No two sum solution"); }Approach #3 (One-pass Hash Table)
public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < nums.length; i++) { int complement = target - nums[i]; if (map.containsKey(complement)) { return new int[] { map.get(complement), i }; } map.put(nums[i], i); } throw new IllegalArgumentException("No two sum solution"); }