Loading

1. [数组][哈希表]两数之和

1. 两数之和

看到这道题的你,也许是第一次接触力扣,如果那么用两层嵌套循环去寻找答案可能是你能尽快接受的一种思路,但你应该尽快的了解已经更为高效的做法——一遍哈希表

具体而言,HashMap的查询效率高,用一个HashMap记录数组中的一个数和它的下标,那么在遍历寻找 target - nums[i] 的差值时,就可以在缓存中(代码中为 :map)查询是否已经存在另一个数。

方法一:一遍哈希表

// 执行用时:2 ms , 在所有Java提交中击败了99.60%的用户 
// 内存消耗:39.3 MB ,在所有Java提交中击败了13.05%的用户

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap<>();
        int[] ans = new int[2];
        for (int i = 0; i < nums.length; i++) {
            if (!map.containsKey(target - nums[i])) {
                map.put(nums[i], i);
            } else {
                ans[0] = map.get(target - nums[i]);
                ans[1] = i;
                // 找到答案,退出循环
                break;
            }
        }
        return ans;
    }
}

方法二:双重循环遍历

// 执行用时: 74 ms , 在所有 Java 提交中击败了 24.83% 的用户 
// 内存消耗: 39.2 MB , 在所有 Java 提交中击败了 16.95% 的用户

class Solution {
    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]) {
                    return new int[] { i, j };
                }
            }
        }
        throw new IllegalArgumentException("No two sum solution");
    }
}
posted @ 2020-10-24 10:38  上海井盖王  阅读(92)  评论(0)    收藏  举报