三种不同解法带你感受leetcode第一题

引言

在 leetcode 刷题可以快速提高自己的技术水平,但是在此之前,需要你有扎实的基础和一定的数据结构和算法能力,此专栏会以 JavaScript 出发,对 leetcode 题进行详细的教学。在开始学习此专栏之前,我们假设你已经拥有了扎实的 JavaScript 能力和对数据结构与算法有了一定的了解,那么此专栏会锦上添花。希望每一位为了梦想奋斗的人都会被生活善待。

第一题:两数之和

  • 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。

  • 答案及解析

    • 思路一:嵌套 for 循环利用嵌套 for 循环,对每一种出现的可能性进行相加,如果等于 target ,则返回两个数的索引。

       /**
        * @param {number[]} nums
        * @param {number} target
        * @return {number[]}
        */
       var twoSum = function(nums, target) {
           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];
                   }
               }
           }
       };
      
    • 思路二:hash方法

       /**
          * @param {number[]} nums
          * @param {number} target
          * @return {number[]}
          */
         var twoSum = function(nums, target) {
             const map = new Map();
             for(let i = 0, len = nums.length;i < len;i++) {
                 if(map.has(target - nums[i])) {
                     return [map.get(target - nums[i]), i];
                 }
                 map.set(nums[i], i);
             }
             return [];
       };
      
    • 思路三:indexOf() 查找下标在一个 for 循环中,寻找 (target - nums[i]) 的值的索引,如果有,并且索引不指向它本身,就是我们要找的索引值,此时由 [i, targetIndex] 就是我们要得到的结果。

       /**
        * @param {number[]} nums
        * @param {number} target
        * @return {number[]}
        */
       var twoSum = function(nums, target) {
         var indexArr = [];
         for(var i = 0; i < nums.length; i++){
           var targetIndex = nums.indexOf(target - nums[i]);
           if(targetIndex != -1 && targetIndex !== i){
             indexarr=[i, targetIndex];
             break;
           }
         }
         return indexArr;
       };
      

我是与墨学长,希望我连绵不断的分享可以在未来的某一天给你带来帮助。

你可能感兴趣的:(leetcode,leetcode,算法,职场和发展)