leetcode-javascript-1. 两数之和

2019-10-04  本文已影响0人  一书文集

https://leetcode-cn.com/problems/two-sum/

for loop常用解法

从第一个开始与后面相加, 直到等于target

    var twoSum = function(nums, target) {
        //map, for, forEach, for in, sor
        var re = [];
        for(var i in nums.length) {
            nums[i] < target ? re += nums[i] : index++
            for(var j =1; j< nums.length; j++)
                console.log(i)
                if((nums[j] + nums[i]) == target) 
                          return [i, j]
                else
                           return 
        }
        // return re
    };
//牛逼的 j = i+1
for (let i = 0; i < nums.length; i++) { 
for (let j = i + 1; j < nums.length; j++) {
 if (nums[i] + nums[j] === target) { return [i, j] } } }

arr.indexOf(searchElement[, fromIndex = 0])

    /**
     * @param {number[]} nums
     * @param {number} target
     * @return {number[]}
     */
var twoSum = function(nums, target) {
//for需要{}, if不可以不用
//for不用{}会出现意向不到的情况
    for(let i in nums){
        let j=nums.indexOf(target-nums[i],i+1) //i = 0, 是否有9 - nums【0】, 从第0后面开始
        if(j>i)
            console.log(i, j)
            return [i,j]
        
    }


}

哈希表
jsmap的使用

var twoSum = function(nums, target) {
  const map = new Map() 
  for (let i = 0; i < nums.length; i ++) {
     //get将值放入otherIndex, 创建一个map, i递增,
    const otherIndex = map.get(target - nums[i]) 
    //undefined也要注意
    if (otherIndex !== undefined) return [otherIndex, i]
     //值在前面 下标在后面
    map.set(nums[i], i)
  }

};

var twoSum = function(nums, target) {
    let map = {};
    for(let i = 0,len = nums.length;i<len;i++){
        if(map.hasOwnProperty(target - nums[i])){
            return [map[target - nums[i]],i];
           }
        map[nums[i]] = i;
    }
};



牛逼的indexOf

var twoSum = function(nums, target) {
    for(let i = 0,len = nums.length;i<len;i++){
        let index = nums.indexOf(target - nums[i]); //index = x
        if(i!=index&&index != -1){ //index没有返回-1,只要存在就可以返回了
            return [i ,index];
        }
    }
};


总结

leetcode的题目很明显都是套路,几乎都是差不多的解法
从暴力解法,到比较巧的使用indexOf, 哈希表等算法之上的东西,
思路可以围绕着这些暴力解法,和方法直接展开,不过要考虑好边界条件

边界条件非常模糊在脑子里,例如indexOf返回的下表怎么处理?
有下表怎么确立返回条件,需要逻辑十分清晰,
i++, j = target - nums[i]的下标
只要j不等i 就可以返回[i, j]

上一篇 下一篇

猜你喜欢

热点阅读