Two Sum

题目:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:

Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

分析:
最简单的方法是用一个双重循环,i从0到n-1, j从0到n-1, i不等于j, 逐个检查nums[i] + nums[j]是否等于target,如果等于则返回i和j。
时间复杂度 O(n^2)

最优解法如下
用一个循环把数组nums过一遍,把key = nums[i], value = i 放入一个map里,然后查看map里是否曾出现过val = target - nums[i]。如果出现过,则证明val + nums[i] = target,也就找到了答案了。
时间复杂度 O(n),因为只用了一个循环,map的操作只需要O(1)

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer,Integer> map = new HashMap<Integer, Integer>();
        int[] ret = {0, 0};
        for(int i = 0; i < nums.length; i++) {
            int t = target - nums[i];
            Integer index = map.get(t);
            if(index != null) {
                ret[0] = index;
                ret[1] = i;
                return ret;
            }
            map.put(nums[i], i);
        }
        return null;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容