[英]if else condition not working in nested loop
所以我为以下问题写了这个逻辑
给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标。
您可能会假设每个输入都只有一个解决方案,并且您可能不会两次使用相同的元素
但由于我的 if-else 不起作用,代码将进入无限循环。
这是代码
/** * @param {number[]} nums * @param {number} target * @return {number[]} */ function twoSum (nums, target) { const numsCopy = [...nums] const sortedArray = nums.sort((a,b) => a - b) let front = 0 let back = sortedArray.length-1 while (front<back) { if (sortedArray[front] + sortedArray[back] === target) { const positionArr = [] let frontPos = false let backPos = false for (let i=0; i<numsCopy.length; i++) { if (frontPos && backPos) { return positionArr } if (sortedArray[front] === numsCopy[i]) { positionArr.push(i) frontPos = true } else if (sortedArray[back] === numsCopy[i]) { positionArr.push(i) backPos = true } } } else if (sortedArray[front] + sortedArray[back] > target) back-- else if (sortedArray[front] + sortedArray[back] < target) front++ } } console.log(twoSum([3,2,4], 6))
在上面的代码中,这就是我的循环可能卡住的地方
if (sortedArray[front] + sortedArray[back] === target) {
const positionArr = []
let frontPos = false
let backPos = false
for (let i=0; i<numsCopy.length; i++) {
if (frontPos && backPos) {
return positionArr
}
if (sortedArray[front] === numsCopy[i]) {
positionArr.push(i)
frontPos = true
}
else if (sortedArray[back] === numsCopy[i]) {
positionArr.push(i)
backPos = true
}
}
输入记录在上面的代码console.log(twoSum([3,2,4], 6))
中。 有人可以帮我弄清楚我可能做错了什么(也许还可以优化代码)
问题是您放错了条件以在循环内返回 positionArr 。 它应该在填充数组后放置,然后只有您也在更新 boolean 值。 请尝试下面的更新片段。
function twoSum (nums, target) {
const numsCopy = [...nums]
const sortedArray = nums.sort((a,b) => a - b)
let front = 0
let back = sortedArray.length-1
while (front<back) {
if (sortedArray[front] + sortedArray[back] === target) {
const positionArr = []
let frontPos = false
let backPos = false
for (let i=0; i<numsCopy.length; i++) {
if (sortedArray[front] === numsCopy[i]) {
positionArr.push(i)
frontPos = true
}
else if (sortedArray[back] === numsCopy[i]) {
positionArr.push(i)
backPos = true
}
if (frontPos && backPos) {
return positionArr
}
}
}
else if (sortedArray[front] + sortedArray[back] > target) back--
else if (sortedArray[front] + sortedArray[back] < target) front++
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.