leetcode第一题 两数之和 java

362 阅读1分钟

题目:给定一个整数数组,和一个目标整数,要求返回数组中2两个数的下标,这两个数相加等于target

第一个解题思路:两次循环数组,依次相加,找出相加等于target的两个数组值,时间复杂度 N的2次方。

class Solution {
    public int[] twoSum(int[] nums, int target) {
        if(nums==null || nums.length < 2){
            return null;
        }
        for(int i=0;i<nums.length;i++){
            for(int j=i+1;j<nums.length;j++){
                if(nums[i]+nums[j]==target){
                    return new int[]{i,j};
                }
            }
        }
        return null;
    }
}

运行结果 Runtime: 51 ms, faster than 24.12% of Java online submissions for Two Sum.

Memory Usage: 39.4 MB, less than 43.89% of Java online submissions for Two Sum.

第二个解题思路:空间换时间的思路,数组里的两个值 n1+n2=target,那么我们依次遍历数据,用Map记录n1的值和下标,当 target - sums[i]的结果在map中存在时,那么数组中存在的值ni+sums[i]==target 我们就找到了n1和n2.

class Solution {
    public int[] twoSum(int[] nums, int target) {
        if(nums==null || nums.length < 2){
            return null;
        }

        Map<Integer,Integer> map=new HashMap<Integer,Integer>();
        for(int i=0;i<nums.length;i++){
            int tra=target-nums[i];
            if(map.containsKey(tra)){
                return new int[]{map.get(tra),i};
            }
            map.put(nums[i],i);
        }        
        return null;
    }
}

Runtime: 1 ms, faster than 99.68% of Java online submissions for Two Sum.

Memory Usage: 39.1 MB, less than 83.47% of Java online submissions for Two Sum.

欢迎大家评论,有没有更好的解题思路。