2 sum

Solution 1: 

iteration using 2 for loop 

Time : O(N^2),  Space: O(1)


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[i] + nums[j] == target) {

                    return new int [] {i, j};

                }

            }

        }

        return new int[2];

    }

}

Solution 2:

store (value, index) pair in HashMap,

iterate the number array,  O(1) time to find the index for the complement target value

Time: O(N) , Space: O(N)


class Solution { public int[] twoSum(int[] nums, int target) { Map map = new HashMap<>();

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

          map.put(nums[i], i);

        }

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

            if (map.containsKey(target - nums[i]) && map.get(target - nums[i]) != i) {

                return new int[] {i, map.get(target - nums[i])};

            }

        }

        return new int[2];

    }

}

improvement:

class Solution { public int[] twoSum(int[] nums, int target) { Map map = new HashMap<>();

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

            if (map.containsKey(target - nums[i])) {

                return new int[] {i, map.get(target - nums[i])};

            } else {

                map.put(nums[i], i);

            }

        }

        return new int[2];

    }

}


总结:

还有一种方法,  先排序,再使用双指针首位相向而行。 但是,排序后每一个element的位置会打乱,对于此题要求的输出不适用。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容