[簡單]LeetCode.001 兩數之和 javascript

給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那 兩個 整數,并返回他們的數組下標。
你可以假設每種輸入只會對應一個答案。但是,你不能重復利用這個數組中同樣的元素。

鏈接:https://leetcode-cn.com/problems/two-sum

方法一

利用雙for循環,復雜度O(n2),耗時148ms


image.png

var twoSum = function(nums, target) {
     let length =  nums.length
    for (let index = 0; index < length; ++index){
        for (let index2 = index+1; index2 < length; ++index2){
            if(nums[index] + nums[index2]===target){
                return [index, index2]
            }
        }
    }
}

方法二

利用hashMap方法,這個算法圖解一目了然,復雜度O(n), 耗時80ms

image.png

  • 這道題本身如果通過暴力遍歷的話也是很容易解決的,時間復雜度在 O(n2)
  • 由于哈希查找的時間復雜度為 O(1),所以可以利用哈希容器 map 降低時間復雜度
  • 遍歷數組 nums,i 為當前下標,每個值都判斷map中是否存在 target-nums[i] 的 key 值
  • 如果存在則找到了兩個值,如果不存在則將當前的 (nums[i],i) 存入 map 中,繼續遍歷直到找到為止
  • 如果最終都沒有結果則拋出異常
  • 時間復雜度:O(n)
var twoSum = function(nums, target) {
   let mapObj = new Map()
   let length =  nums.length
   for (let index = 0; index < length; ++index){
       let t = target - nums[index]
       let temp = mapObj.get(t)
       if(temp >= 0) {
           return [temp, index]
       }
       mapObj.set(nums[index], index)
   }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容