Two Sum
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
第一次最简单直接的想法:
1 public class Solution { 2 public int[] twoSum(int[] nums, int target) { 3 int l=nums.length; 4 int result[]=new int[2]; 5 for(int i=0;i<l-1;i++){ 6 for(int j=i+1;j<l;j++){ 7 if(nums[i]+nums[j]==target){ 8 result[0]=i; 9 result[1]=j; 10 } 11 } 12 } 13 return result; 14 } 15 }
不过有一个问题,如下代码将出现Missing return statement,return语句返回到上一层,并不能直接返回函数结果。
public class Solution { public int[] twoSum(int[] nums, int target) { int l=nums.length; int result[]=new int[2]; for(int i=0;i<l-1;i++){ for(int j=i+1;j<l;j++){ if(nums[i]+nums[j]==target){ result[0]=i; result[1]=j; return result;//err } } } } } 在方法体末尾加 return result 可解决问题。
这种方法可以实现结果的输出,不过这可以Leetcode,初学者的水平提交的时候都没有成就感。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
HashMap
return语句:是指结束该方法,继续执行方法后的语句。
因此不会出现【i,j】和【j,i】的情况
public class Solution { public int[] twoSum(int[] nums, int target) { if (nums == null || nums.length <= 1) { return new int[2]; } Map<Integer, Integer> map = new HashMap<Integer, Integer>(); // key = target - nums[i], just one solution for (int i = 0; i < nums.length; i++) { map.put(target - nums[i], i); } for (int i = 0; i < nums.length; i++) { Integer v = map.get(nums[i]); if (v != null && v != i) { return new int[] { i , v }; } } return null; } }
public class Solution { public int[] twoSum(int[] nums, int target) { int[] result = new int[2]; Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (int i = 0; i < nums.length; i++) { if (map.containsKey(nums[i])) { result[1] = i; result[0] = map.get(nums[i]); return result; } map.put(target-nums[i], i); } return result; } }注意最后当最后一个 return被注释掉时会出现!!!missing return statement!!!用来结束方法。
总结:通过遍历方法可以最直观的实现函数功能,HashMap提高算法效率,深入理解HashMap(get,put,containKey等方法)
方法结束时用return结束方法,解决没有找到 indices of the two numbers。
时间: 2024-10-13 16:01:26