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

        

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章