Leetcode 1 兩數(shù)之和

問題描述

給定一個(gè)整數(shù)數(shù)組 nums 和一個(gè)目標(biāo)值 target,請你在該數(shù)組中找出和為目標(biāo)值的那 兩個(gè) 整數(shù),并返回他們的數(shù)組下標(biāo)。

你可以假設(shè)每種輸入只會(huì)對應(yīng)一個(gè)答案。但是,你不能重復(fù)利用這個(gè)數(shù)組中同樣的元素。

實(shí)例:

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

因?yàn)?nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

解決方法

解法一

暴力遍歷方法,通過雙層遍歷,窮盡組合找到兩個(gè)元素,使之和滿足目標(biāo)值。

原理:雙層遍歷所有元素,找到 a + b = target 的元素的索引。

時(shí)間復(fù)雜度為 O(n^2),空間復(fù)雜度為 O(1)。

var twoSum = function(nums, target) {

  for (let i = 0; i < nums.length; i++) {
    const a = nums[i];
    
    for (let j = i + 1; i < nums.length; i++) {
      const b = nums[i];
      if (a + b === target) {
        return [i, j];
      }
    }
  }

  return new Error('there is no answer');
};

解法二

為了快速的查找 target - nums[i] 元素所在的位置,我們可以使用哈希表快速查找元素。比起遍歷算法,執(zhí)行的時(shí)間效率為 O(1)。具體實(shí)現(xiàn)如下:

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
  const map = new Map();

  nums.forEach((value, index) => {
    map.set(value, index);
  });

  for (let i = 0; i < nums.length; i++) {
    const a = nums[i];
    const residual_value = target - a;
    const j = map.get(residual_value);
    if (j !== undefined && j !== i) {
      return [i, j];
    }
  }

  return new Error('there is no answer');
};

時(shí)間復(fù)雜度為 O(n),空間復(fù)雜度為 O(n)。

解法三

仍然是使用哈希表找元素,但是只使用一次哈希。

var twoSum = function(nums, target) {

  const map = new Map();

  for (let i = 0; i < nums.length; i++) {
    const complement = target - nums[i];

    if (map.get(complement)) {
      return [map.get(complement), i];
    }
    
    map.set(nums[i], i);
  }

  return new Error('there is no answer');
};

參考文檔

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 題目: 題目地址:https://leetcode-cn.com/problems/two-sum/ 問題描述: ...
    MrGeekr極氪閱讀 692評論 0 0
  • 兩數(shù)之和 LeetCode 題目描述 給定一個(gè)整數(shù)數(shù)組 nums 和一個(gè)目標(biāo)值 target,請你在該數(shù)組中找出和...
    天空像天空一樣藍(lán)閱讀 275評論 0 2
  • 題目描述 給定一個(gè)整數(shù)數(shù)組 nums 和一個(gè)目標(biāo)值 target,請你在該數(shù)組中找出和為目標(biāo)值的那 兩個(gè) 整數(shù),并...
    Chase_Eleven閱讀 352評論 2 0
  • LeetCode:1兩數(shù)之和 標(biāo)簽:數(shù)組、哈希表 給定一個(gè)整數(shù)數(shù)組 nums 和一個(gè)目標(biāo)值 target,請你在該...
    burger8閱讀 133評論 0 0
  • 山河是 城市的母親 人是城市 弒母的兇器 沒有罪咎 沒有恩情 別太高看自己 兇器保持中立
    一枝小草閱讀 152評論 0 0

友情鏈接更多精彩內(nèi)容