algorithm easy

    1. 两数之和

    1. public int[] twoSum2(int[] nums, int target) {
    2. HashMap<Integer, Integer> map = new HashMap();
    3. for (int i = 0; i < nums.length; i++) {
    4. if (map.containsKey(nums[i])) {
    5. return new int[]{i, map.get(nums[i])};
    6. }
    7. map.put(target - nums[i], i);
    8. }
    9. return null;
    10. }

    思路

    刚开始可能想到的是现将每一个数需要的补数 Target - nums[i] 全部放入 map 之后再找, 但其实可以放一个补数找一次 (找这个数是不是前面某个数的补数), 再进一步就是放第 i 个数之前先找是不是之前某个数的补数, 是的话直接返回答案, 不是再放入这个数的补数. 这样, 甚至直接满足了条件 “一个数不能算两次”.

    效率

    1. 执行用时 2 ms, 在所有 Java 提交中击败了 99.61% 的用户
    2. 内存消耗 39.8 MB, 在所有 Java 提交中击败了 5.06% 的用户

    _