You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Swift中isIncreasing函数的布尔值返回逻辑问题?

修复Swift中isIncreasing函数的布尔值逻辑问题

你的代码存在几个关键问题,导致无法正确判断数组是否符合非递减要求,以下是具体分析和修复方案:

原代码问题分析

func isIncreasing(_ l: [Int]) -> Bool {
    
    var flagreturn=true
    if l.count == 0 {
        flagreturn=true
        
        
    } else {
        for i: Int in l {
            if l[i] < l[i + 1] {
              flagreturn=true
                
            }
            else{
                flagreturn=false
                
            }
           
        
            
        }
    }
    return flagreturn

}
  • 遍历逻辑错误:for i: Int in l 是遍历数组的元素值而非索引,比如数组[1,2,3]中i会取1、2、3,用l[i]会直接触发数组越界崩溃。
  • 布尔值覆盖问题:每次循环都会重置flagreturn,哪怕前面已经出现递减情况,后续循环可能将其改回true,最终结果只取决于最后一次循环的判断。
  • 判断条件错误:非递减允许元素相等,应该检测是否出现前元素 > 后元素的递减情况,而非用<判断递增。

修复后的代码方案

方案一:基于索引遍历(直观易读)

func isIncreasing(_ l: [Int]) -> Bool {
    guard l.count > 1 else { return true } // 空数组或单个元素直接返回true
    
    for index in 0..<l.count - 1 {
        if l[index] > l[index + 1] {
            return false // 一旦发现递减,立即终止并返回false
        }
    }
    return true // 所有相邻元素都满足非递减,返回true
}

方案二:用Swift高阶函数简化代码

func isIncreasing(_ l: [Int]) -> Bool {
    zip(l, l.dropFirst()).allSatisfy { $0 <= $1 }
}
  • zip(l, l.dropFirst()) 将数组元素与下一个元素配对,比如[1,2,3]会生成(1,2)、(2,3)两组数据
  • allSatisfy { $0 <= $1 } 检查所有配对是否满足前元素小于等于后元素,只要有一组不满足就返回false

关键优化点

  • 提前终止:发现不符合条件的元素对时立即返回,避免无效遍历
  • 索引安全:使用0..<l.count - 1的索引范围,彻底避免越界
  • 逻辑准确:用<=匹配非递减规则,用>精准检测异常情况

内容的提问来源于stack exchange,提问作者tyoung1385

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 21:45:35