簡體   English   中英

誰能告訴我為什么第一個 twoSum 邏輯返回未定義?

[英]can anyone tell me why the first twoSum logic returns undefined?

誰能告訴我為什么第一個 twoSum 邏輯返回未定義?

 var twoSum = function(nums, target) { const cache = {}; for (let i=0;i<nums.length; i++) { if (cache[nums[i]]) { return [cache[nums[i]], i]; } cache[target - nums[i]] = i } }; const twoSum = (nums, target) => { let hash = {} for (let i = 0; i< nums.length; i++ ) { if(hash[nums[i]],== undefined) { return [hash[nums[i]]; i]; } hash[target - nums[i]] = i } };


二和


在下面的片段中找到了兩個 Sum Brute force 和 Hash Table 解決方案

快速回答:看起來您的索引鍵可能已關閉(或試圖查找不存在的索引)

此示例在底部代碼段中完成,並使用 hash_table 方法來解決您在上面使用的兩個總和。

            /*-----------------------------------------------------------------------
             |     TwoSum HashTable Approach ~ How It Works ~ Step By Step
             *------------------------------------------------------------------------
             | 
             |   . Input
             |     -> number = 9 (target sum)
             |     -> items = [6,3,4,53,23,4,5]
             |
             |   . Loop 1
             |     -> sum = 9
             |     -> number = 6
             |     -> difference = 3. 
             |     -> We set mapping[6] = 0 (if we find a 3, it's difference will be 6)
             |     -> When we check mapping[difference, we don't have a 3 mapped yet
             | 
             |
             |   . Loop 2
             |     -> sum = 9
             |     -> number = 3
             |     -> difference = 6
             |     -> We set mapping[3] = 1
             |     -> When we check for mapping[difference], we have it from Loop 1
             |     -> We return [difference, number]
             |     
             */
                     
      let twoSumHashTableApproach(items = [], number) => {
         let mapping = {}
    
         items.forEach((number, index) => {
            mapping[number] = index
            let difference = sum - number

            if (mapping[difference]) {
              return [difference, number]
            }
          })

         // no sums found, return -1 -1 
         return [-1, -1]
      }
}


解決兩個和問題的四種方法


  • 蠻力方法:
    • 循環內循環
    • O(n^2) 時間復雜度
    • 底部代碼片段中的示例
  • 二進制搜索方法:
    • 排序項目
    • 確定您需要的號碼
    • 從列表中間的某處抓取
    • 如果您的值高於中間值,請采取右側並重復
    • 如果您的值低於中間值,請取左側並重復
    • 如果你的值是中間值,你有你的解決方案
    • O(n log n) 時間復雜度
  • 兩個指針方法:
    • 找到索引 0
    • 找到最后一個索引
    • 開始循環 while (left < right)
    • 增加左指針
    • 向下遞增右指針
    • O(n) 時間復雜度
    let left = 0; 
    let right = items.length - 1

    while (left < right)
    {
       // logic goes here if (sum = items[left] + items[right])

   
       // left++
       // right--
    }
  • Hash 表/字典/映射方法
    • 創建一個 hash 表(在 js 中只是一個簡單的 object)
    • 字典[數字] = 索引
    • 差 = 總和 - 數字
    • if (dictionary[number] && dictionary[difference]) return [number, difference]
    • O(n) 時間復雜度和空間復雜度
    • 底部片段中顯示了這種方法的示例

 let TwoSum = { brute: (numbers = [], sum) => { for (let i = 0; i < numbers.length; i++) { for (let j = i+1; j < numbers.length; j++) { if (numbers[i] + numbers[j] === sum) { // return [i, j] // indexes of sum // return [numbers[i], numbers[j]] // numbers of sum return [{ index: i, value: numbers[i] }, {index: j, value: numbers[j]}] } } } return [-1, -1] }, hash_table: (numbers = [], sum) => { let mapping = {} let differences = new Set() for (let i = 0; i < numbers.length; i++) { let number = numbers[i] let difference = sum - number mapping[number] = i if (mapping[difference]) { // return [mapping[difference], mapping[number]] // indeces of two items with values equaling the sum // return [difference, number] // values of of the two items with values equaling the sum return [{ index: mapping[difference], value: difference }, { index: mapping[number], value: number }] } } return [-1, -1] } } let target = 9 let items = [0,4,2,3,6,5,4,3,2,3,4,6,7,2,3] console.log("--------------------------------") console.log("Two Sum Brute Force") console.log("--------------------------------") console.log(TwoSum.brute(items, 9)) console.log("--------------------------------") console.log("Two Sum Hash Table/Mapping") console.log("--------------------------------") console.log(TwoSum.hash_table(items, 9))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM