首页 > 代码库 > Leetcode第一刷(程序还是需要多练习!)Two Sum

Leetcode第一刷(程序还是需要多练习!)Two Sum

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。

Leetcode第一刷(程序还是需要多练习!)Two Sum