LeetCode 2419:最长最大按位与子数组代码大测试用例出错排查
问题分析与修复
你的代码逻辑存在一个关键错误:当遇到非最大值元素时,错误地将temp重置为1,导致后续连续最大值段的长度被多计算了1。
错误场景复现
举个简单例子:假设数组为[max, max, x, max, max, max],最长连续最大值序列长度是3,但你的代码会算出4。流程如下:
max_index=0,temp初始为1(对应第一个max)- 遍历到第二个max,
temp变为2 - 遇到
x,ans更新为2,temp重置为1 - 遍历到第三个max,
temp变为2;第四个max→3;第五个max→4 - 最终
ans=4,但实际最长连续序列是3
错误原因
当遇到非最大值元素时,当前连续最大值段已经结束,temp应该重置为0(表示当前没有连续的最大值),而不是1。你的代码中temp=1会导致后续遇到第一个最大值时,直接从1开始累加,相当于把这个最大值重复计算了一次。
修复后的代码
不需要定位第一个最大值的索引,直接遍历整个数组即可,逻辑更简洁且正确:
max_val = max(nums) ans = 0 current_length = 0 for num in nums: if num == max_val: current_length += 1 ans = max(ans, current_length) else: current_length = 0 return ans
修复逻辑说明
- 先找到数组中的最大值
max_val - 遍历数组,维护
current_length记录当前连续最大值的长度 - 遇到最大值时,
current_length加1,并更新ans为当前最长长度 - 遇到非最大值时,
current_length重置为0 - 最后返回
ans即可
内容的提问来源于stack exchange,提问作者Abhinav Tahlani
相关产品推荐
相关产品推荐

