LeetCode-兩數之和(js+Map數據結構)

題目

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

實例:

給定 nums = [2, 7, 11, 15], target = 9
因爲 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

思路:

  1. 創建一-個map
  2. for循環遍歷nums數組
  3. 用target減nums[i],以計算哪個數能跟當前的數字相加得到target
  4. 檢查map裏有沒有用target減nums[i]得到的數,如果有則返回結果,如果沒有則把num[i]當作key,i當作value放入map中(爲什麼?)u用到了map.has檢查map中對應的key

模擬假如:nums=[2,3,11,7] target=
7,6,-2,2
要找到2和7並返0和3
MAP = {
2:0,
3:1,
11:2
}
9-7等於2,在map中有這這個數,就找到了2和7這個對應的值

const twoSum = (nums, target) => {
  //創建一-個map
    const map = new Map()
    //for循環遍歷nums數組
    for (let i= 0; i<nums.length; i++) {
      //用target減nums[i],以計算哪個數能跟當前的數字相加得到target
      const complement = target - nums[i]
     // 檢查map裏有沒有用target減nums[i]得到的數,如果有則返回結果,如果沒有則把num[i]當作key,i當作value放入map中,用到了map.has檢查map中對應的key
      if (map.has(complement)) {
        //如果查找到map中存在就返回兩個數對應的下標
        return [map.get(complement),i]
      }else {
        map.set(nums[i],i)
      }
    }
    return []
}

console.log(twoSum([2,3,11,7],9))//[ 0, 3 ]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章