leetcode 刷題 —— twoSum

題目

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

你能夠假設每種輸入只會對應一個答案。可是,你不能重複利用這個數組中一樣的元素。ui

示例:spa

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

由於 nums[0] + nums[1] = 2 + 7 = 9 因此返回 [0, 1]element

解題思路

遍歷 nums,用一個hashmap 存儲已經訪問過的數字和對應的下標,若 hashmap 中存在一個鍵與 target - nums[i] 相等,說明找到了與該數字相加等於 target 的數字,返回 hashmap 中對應的鍵值和該數字的下標。get

js demo

/** * @param {number[]} nums * @param {number} target * @return {number[]} */
var twoSum = function (nums, target) {
  const visited = {} // 記錄出現的數字, 空間複雜度N

  for (let index = 0; index < nums.length; index++) {
    const element = nums[index];

    if (visited[target - element]) {
      return [visited[target - element] - 1, index]
    }
    // 這裏爲何不直接等於 index 呢?由於 index 會有爲 0 的狀況,這個時候,上述寫法就有問題了,由於 0 爲 false
    visited[element] = index + 1;
  }
  return [];
};

console.log(twoSum([2, 7, 11, 15], 22))
複製代碼
相關文章
相關標籤/搜索