Two Sum --两个数的和

本文介绍了一种解决“两数之和”问题的有效算法。该算法通过建立哈希表来快速查找数组中能相加等于特定目标值的两个数,并提供两种实现方式:一种使用Java,另一种使用JavaScript。

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

 

转载于:https://www.cnblogs.com/linwx/articles/7668969.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值