如何编写算法找出数组中奇数连续重复的最长次数?
找出数组中奇数连续重复的最大次数
示例输入
let N = 12 let arr = [1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1]
任务要求
找出数组中某个奇数连续重复出现的最大次数。
求解思路
- 遍历数组,拆分出所有连续相同数字的片段
- 筛选出其中数字为奇数的片段
- 计算这些奇数片段的长度,取最大值即为结果
根据示例的提示信息:
- 数字1在索引0到3之间连续重复4次→共4次
- 数字2在索引4到8之间连续重复5次→共5次
- 数字1在索引9到11之间连续重复3次→共3次
- 数组中的奇数为1,它的连续出现次数为4次和3次,因此数组中奇数连续重复的最大次数是4
现有待完善函数
function longestRepeatedOdd(N, array) { // Write code here let count = 0; for (let i = 0; i <= array.length-1; i++){ if (array[i] % 2 !== 0){ count++ }else if (array[i] % 2 === 0){ break; } } console.log(count) }
原函数的问题
原函数只能统计数组开头的连续奇数次数,遇到第一个偶数就直接终止遍历,完全无法处理后续出现的奇数段(比如示例中索引9-11的连续1),因此无法得到正确结果。
修正后的实现
function longestRepeatedOdd(N, array) { let maxCount = 0; let currentCount = 0; for (const num of array) { if (num % 2 !== 0) { currentCount++; maxCount = Math.max(maxCount, currentCount); } else { currentCount = 0; } } console.log(maxCount); return maxCount; }
代码说明
maxCount:全程记录找到的最大连续奇数次数currentCount:实时统计当前正在连续的奇数次数- 遍历数组每个元素:
- 遇到奇数时,
currentCount加1,同时用Math.max更新maxCount - 遇到偶数时,重置
currentCount为0,因为连续奇数的序列被打断
- 遇到奇数时,
- 遍历结束后,
maxCount就是我们要找的结果
内容的提问来源于stack exchange,提问作者Nawab Pvt
相关产品推荐
相关产品推荐

