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].

意思:给一目标target,看数组中那两个数相加等于这个数。

思路:

    1.建立哈希表,将数组中存放在哈希表中,将n2 = target -nums[i],target减去其中一个数,得到另外一个数,然后去哈希表查找这个数,若查找则return,否则继续遍历。

    2.JavaScript中数组的indeOf(),不过时间超时;

1.Java代码如下:

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] result = new int[2];
        int n2;
        int len = nums.length;   
        Integer index;     //包装类,避免类型转换
        Map<Integer,Integer> map = new HashMap<Integer,Integer>(len);//建立哈希表
        for(int i = 0;i < len;i++){
            map.put(nums[i],i);        //将数组存放在哈希表中
        }
        for(int i = 0;i<len;i++){
            n2 = target - nums[i];     //得到其中一个数
            index = map.get(n2);      //在哈希表中查找
            if(index!=null&&index>i){      //有返回值符合条件时执行
                result[0] = i;  
                result[1] = index;  
                break;  
            }
        }
        return result;
}
}

 2.JavaScript数组方法实现:

var twoSum = function(nums, target) {
    var reArr=[];
    for(var i=0;i<nums.length;i++){
        var diff=target-nums[i];
        if(reArr.indexOf(diff)>-1){
            return [i,reArr.indexOf(diff)];
    }
        reArr.push(nums[i])
    }
    return null

 

posted @ 2017-10-14 23:13  im.lhc  阅读(132)  评论(0编辑  收藏  举报