leetcode01-twoSum

两数之和,一般是只有一组解。

方法一:暴力循环;

方法二:假设有多组解,把所有结果放到数组中,然后找距离最近的。

方法三:一个循环构建哈希表,一个循环查找结果;

方法四:一个循环,同事构建哈希表和查找结果;

/*1.假设数组中只有唯一的解,并且要求不能是重复的坐标*/
var testNum1=[34,4,6,9,3,0];
var twoSum1=function (nums,target) {
    var result=[];
    for(var i=0;i<nums.length;i++){
        for(var j=i+1;j<nums.length;j++){
            if(nums[i]+nums[j]==target){
                result.push(i);
                result.push(j);
            }
        }
    }
    return (result.length!==0? result:null);
};


/*2.输入数组里面有多种这样的值*/
var testNum2=[1,2,3,4,5,6,7,8];
var twoSum2=function (nums,target) {
    var result=[];
    var temp=[];

    for(var i=0;i<nums.length-1;i++){
        for(var j=i+1;j<nums.length;j++){
            if(nums[i]+nums[j]==target){
                temp.push(i);
                temp.push(j);
                result.push(temp);
                temp=[];
            }
        }
    }
    /*返回距离最小的那一组*/
    if(result.length==0){
        return null;}else{
        var min=result[0][1]-result[0][0];
        var finalReault=result[0];
        for(var i=0;i<result.length;i++){
            var distance=result[i][1]-result[i][0];
            if(distance<min){
                min=distance;
                finalReault=result[i];
            }
        }
    }
    return finalReault;
};


/*3.构造一个哈希表,然后用target-值,判断剩余的值是否在在哈希表中*/
var twoSum3=function(nums,target){
    if(!Array.isArray(nums)|| Object.prototype.toString.call(target)!=='[object Number]'){return 'type error'};
    var i,j,len=nums.length,arr=[];
    for(i=0;i<len;i++){
        arr[nums[i]]=i;
    }
    for(j=0;j<len;j++){
        if(arr[target-nums[j]]!==undefined &&  arr[target-nums[j]]!==j ) {
            return [j,arr[target-nums[j]]];
        }else{
            return -1;
        }
    }
}


/*4.对3的改进,使用一个循环,在循环中边寻找结果,边构建哈希表*/
var twoSum4=function(nums,target){
    if(!Array.isArray(nums)||Object.prototype.toString.call(target)!=='[object Number]') return 'type error';
    var arr=[],i,j,len=nums.length;
    for(i=0;i<len;i++){
        j=arr[target-nums[i]];
        if(j!==undefined){return [i,j]};
        arr[nums[i]]=i;
    }
}

console.log(twoSum4(testNum1,7));
console.log(Object.prototype.toString.call(6)=='[object Number]');



注意点:①判断是否是数组;

               ②判断是否是Number类型

(typeof 7)==Number)    //会返回false

//用内置对象,该方法也可以判断是不是数组
Object.prototype.toString.call(变量)==‘[object Number]’

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值