前端学算法第一天

47 阅读43分钟

 第一天刚开始就学两数之和先尝试用暴力破解,发现一旦提交代码就会报错,计算超时了

/** * @param {number[]} nums * @param {number} target * @return {number[]} */var twoSum = function(nums, target) {     for(let i=0;i<nums.length;i++){          for(let j=0;i<nums.length;j++){             if(nums[i]+nums[j]===target&&i!==j){                 return [i,j]             }     }     }};

那么就要想办法去解决这个问题,首先就要考虑复杂度问题

  复杂度其实是一个模糊的感念,复杂度用O表示,首先第一种情况数据长度是N 算法大概执行了多少次,上面的算法时间复杂度是O(n^2).空间复杂度指的是正在运行这个算法的时候需要多少额外的空间,以上代码只用到了i和j,O(1)

 下面代码使用备忘录来做

var twoSum = function(nums, target) {    let obj={}    for(let i=0;i<nums.length;i++){        let num=nums[i]        let n=target-num        // 上面的n是我们需要的,当2来的时候我们就知道需要77来的时候就知道需要2,然后就是检查是否存在到当前对象        // 然后返回下标和对象中存在的下标        if(num in obj){            return [i,obj[num]]        }else{            obj[n]=i        }    }};