两段Java选数算法仅if块范围不同输出结果不同的原因求解
两段代码结果差异的核心原因
两段代码唯一的区别是counter变量的重置逻辑:
- 第一段代码:每次外层
i循环遍历完所有j后,无论counter > max的条件是否成立,都会强制把counter重置为0,保证每一轮i对应的匹配计数都是独立计算的。 - 第二段代码:仅当
counter > max条件成立时,才会重置counter;如果条件不成立,counter会保留上一轮i循环的计数结果,和当前轮的计数累加,最终导致计数偏大。
用题目示例复现错误过程
示例输入排序后为[1,1,2,2,4,4,5,5,5],第二段代码执行流程如下:
i=0时,内层循环统计到符合条件的j共3个,counter=3,满足3>0,max更新为3,counter重置为0。i=1时,内层循环统计到符合条件的j共2个,counter=2,不满足2>3,counter没有重置,保留值2。i=2时,内层循环统计到符合条件的j共1个,counter=2+1=3,不满足3>3,counter保留值3。i=3时,内层循环没有符合条件的j,counter=3+0=3,不满足3>3,counter保留值3。i=4时,内层循环统计到符合条件的j共4个,counter=3+4=7,满足7>3,max更新为7,counter重置为0。- 后续循环的
counter都不会超过7,最终返回7+1=8,和正确结果5完全不符。
内容的提问来源于stack exchange,提问作者Mate25
相关产品推荐
相关产品推荐

