[英]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]
}
}
let left = 0;
let right = items.length - 1
while (left < right)
{
// logic goes here if (sum = items[left] + items[right])
// left++
// right--
}
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.