刷題:給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那 兩個 整數,並返回他們的數組下標。


刷題系列一:

注:題型出自leet-code https://leetcode-cn.com/problems/two-sum/

給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那 兩個 整數,並返回他們的數組下標。

你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素不能使用兩遍。

示例:

給定 nums = [2, 7, 11, 15], target = 9

因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

咋眼一看還是挺簡單的,后來我才知道我還是太年輕了,下面給出我的幾個方案參考一下:

方案一:(前端人員的第一反應)

var towSum = function(nums, target){
  for(let i=0, len = nums.length; i<len; i++) {
    for(let j = i+1; j < nums.length; j++) {
      if(nums[i] + nums[j] == target) {
        return [i, j]
      }
    }
  }
}

2個for循環遍歷后一個一個相加得到想要的值,要是這是一個你自己程序中的一個方法,那還行,但是如果這是一道面試題的話,顯然不是面試官想要的答案,因為從時間復雜度上講,O(n)的時間復雜度是不可能被接收的,而且也不滿足題型的要求(數組中同一個元素不能使用兩遍),如果數據多,這里不知道被用了多少遍了

方案二:

通過es6中Map()方法暫存數據

var towSum = function(nums, target){
    let map = new Map();for (let i in nums) {
        map.set(nums[i], i)
     }
     for (let j = 0; j < nums.length - 1; j++) {
         if (map.has(target - nums[j]) && map.get(target - nums[j]) != j) {
        return [j, +map.get(target - nums[j])] } } }

通過map中的has方法找到目標與其它元素的差值,但是我還是覺得給map賦值的循環可以改進一下,於是就有了下面的;

方案三:

直接通過對象的方式暫存數據

var towSum = function(nums, target){
  let obj = {};
  for(let i=0, len=nums.length; i< len; i++){
    let mult = target - nums[i];
    if(mult in obj){
      return [obj[mult], i];
    }
    obj[nums[i]] = i;
  }
}

出於這種對象的靈感,我想到了用數組的indexOf()方法來查找值,於是就有了下面的

方案四:

var towSum = function(nums, target){
  for(let i=0, len = nums.length; i< len; i++) {
    if(nums.indexOf(target - nums[i]) > -1 ) {
      return [i, nums.indexOf(target - nums[i])]
    }
  }
}

 

小結:

以上的方法僅供大家參考,可能還會有更多更好的方案,歡迎大家留言交流!有時候我們在看待一些問題的時候,往往會局限在自己的小思維里面,總是覺得自己腦海的第一感覺就是最優解,但往往都不是,人在不逼自己一把,你都不知道你原來可以寫出更多更好的方法來,所以,要跳出自己的思維,多去嘗試,獲取會有意想不到的收獲!

 

注明:原創不易,如需轉載,請注明出處!謝謝!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 給定一個整數數組 nums 和一個整數目標值 target,請你在該數組中找出 和為目標值 target  的那 兩個 整數,並返回它們的數組下標。 php 獲取兩個給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那 兩個 整數,並返回他們的數組下標。 給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那 兩個 整數,並返回他們的數組下標。 給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那 兩個 整數,並返回他們的數組下標。 刷題之給定一個整數數組 nums 和一個目標值 taget,請你在該數組中找出和為目標值的那 兩個 整數 用js方法給定一個整數數組nums和一個目標值target,在該數組中找出和為目標值的那兩個整數,並返回他們的下標 給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那 兩個 整數,並返回他們的數組下標。 你可以假設每種輸入只會對應一個答案。但是,你不能重復利用這個數組中同樣的元素。 示例: 給定 nums = [2, 7, 11, 15], target = 9 因為 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 算法題一(給定一個整數數組和一個目標值,請你在該數組中找出和為目標值的那兩個整數的索引) 給定一個整數數組和一個目標值,找出數組中和為目標值的兩個數 例如給定nums = [2,7,11,15],target = 9 題1:給定一個整數數組和一個目標值,找出數組中和為目標值的兩個數
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM