繁体   English   中英

if else 条件在嵌套循环中不起作用

[英]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))中。 有人可以帮我弄清楚我可能做错了什么(也许还可以优化代码)

问题链接: https://leetcode.com/problems/two-sum/

问题是您放错了条件以在循环内返回 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM