Java数组求最值、出现次数及极值位置代码逻辑错误疑问
错误原因
你最初代码的问题核心是:当找到比当前记录值更大的新最大值时,没有清空之前旧最大值的累计计数,而是直接在原有计数基础上累加,导致最终最大值统计次数远大于实际值。
我们用实际运行场景举例就很容易理解:
假设生成的数组为 [2, 5, 5, 7, 7, 7]
- 初始状态:
Max = Integer.MIN_VALUE,Max_Count = 0 - 遍历到第一个元素2:2大于初始的
Integer.MIN_VALUE,触发if分支,Max_Count += 1→ 计数变为1,Max更新为2 - 遍历到第二个元素5:5大于当前Max=2,触发if分支,
Max_Count += 1→ 计数变为2,Max更新为5- 这一步已经出现错误:5是新的最大值,当前是第一次出现,正确计数应该是1,而不是在旧最大值2的计数基础上加1得到2
- 遍历到第三个元素5:等于当前Max,触发else if分支,
Max_Count += 1→ 计数变为3- 此时5实际只出现了2次,但计数已经统计为3
- 遍历到第四个元素7:7大于当前Max=5,触发if分支,
Max_Count += 1→ 计数变为4,Max更新为7- 7实际是第一次出现,正确计数应该是1,这里直接累加后变成4,偏差会随着最大值更新次数越来越大
你修改后的Max_Count = 1逻辑是完全正确的:当找到更大的新最大值时,之前的所有旧最大值的统计全部作废,直接将新最大值的计数重置为1(当前遍历到的这个元素就是新最大值的第一次出现),后续遇到和当前Max相等的元素再累加计数,结果自然符合预期。
最小值统计的逻辑问题完全同理:每次找到更小的新最小值时,需要重置Min_Count = 1,而不是在旧最小值的计数基础上累加,否则会出现完全一致的计数错误。
内容的提问来源于stack exchange,提问作者Aadav
相关产品推荐
相关产品推荐

