[LeetCode No.1] 两数之和

题目

题解

题解一:
很简单,直接暴力解法,两层for循环,不多说

题解二(官方解法):
因为是找两数之和为target,且只会有一个解
要在O(n平方)上优化,显然想到循环一次就得找到解
又恰好是两数,则可以利用HashMap的key和value,把数组值作为键,数组键作为value
边循环边判断key中是否存在target-nums[i],若存在 直接找到答案
若不存在则将nums[i]:i存入map

代码

解法一:

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

        return new int[0];
    }
}

解法二:

public class Solution_2 {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer,Integer> hashMap = new HashMap<>();

        for (int i = 0; i < nums.length; i++) {

            if (hashMap.containsKey(target - nums[i])){         //若key存在,则找到答案
                return new int[] {i, hashMap.get(target - nums[i])} ;
            }

            hashMap.put(nums[i],i);             //不存在则存入
        }

        return new int[0];
    }
}
posted @ 2021-03-25 21:29  饼先生  阅读(34)  评论(0编辑  收藏  举报