如何编写程序找出连续出现次数最多的元素?
如何找出连续出现次数最多的元素
嘿,我来帮你搞定这个问题!你要找的是连续出现次数最多的元素——重点就在「连续」这俩字上,所以不能单纯统计元素总出现次数,得盯着相邻元素是不是同一个,记录每个连续段的长度才行。
先看你的示例输入:6 1 6 4 4 4 6 6,4连续出现了3次,而6最多只有连续2次,所以结果确实是4,你的需求完全合理。
先说说你现有代码的问题
你的思路方向是对的,但代码里有几个明显的bug:
- 变量名重复使用:一开始
c是输入的元素总数,后面循环里又把c赋值成x,这会直接搞乱后续的计数逻辑 while循环的逻辑错误:while h[x] != h[c]: n+=1这里,不仅条件不对,还很容易陷入无限循环,根本没法正确统计连续次数- 没有正确跟踪每个连续序列的起止,最后
final数组里的内容也没法反映真实的连续次数
正确的解法思路
核心逻辑就是遍历列表,跟踪当前连续的元素和它的次数,同时记录目前为止的最大次数和对应的元素,步骤如下:
- 先处理边界情况:比如空列表或者只有一个元素的情况,直接返回对应结果
- 初始化几个关键变量:当前连续元素、当前连续次数、最大次数、结果元素
- 从第二个元素开始遍历列表:
- 如果当前元素和正在跟踪的元素相同,就把当前连续次数加1
- 如果不同,就把当前连续次数和最大次数比较:如果更大,就更新最大次数和结果元素;如果相等,可以选择保留先出现的或者后出现的元素(这里默认保留先出现的)
- 然后重置当前跟踪的元素和次数为当前元素和1
- 遍历结束后,别忘了再检查最后一个连续序列——因为循环结束时,最后一个序列的次数还没和最大次数比较呢!
完整代码示例
# 获取输入:先输入元素个数,再逐个输入元素 try: count = int(input()) nums = [int(input()) for _ in range(count)] except ValueError: print("请输入有效的整数哦") exit() # 处理空列表的情况 if not nums: print("列表是空的,找不到元素") exit() # 处理只有一个元素的情况 if len(nums) == 1: print(nums[0]) exit() # 初始化跟踪变量 max_streak = 1 current_streak = 1 result = nums[0] current_num = nums[0] # 从第二个元素开始遍历 for num in nums[1:]: if num == current_num: current_streak += 1 else: # 比较当前连续次数和最大次数,更新最大值 if current_streak > max_streak: max_streak = current_streak result = current_num # 如果次数相等,这里选择不更新,保留第一个出现的最大连续元素 # 要是想保留后出现的,把上面的>改成>=就行 # 重置当前跟踪的元素和次数 current_num = num current_streak = 1 # 检查最后一个连续序列,避免漏掉 if current_streak > max_streak: max_streak = current_streak result = current_num print(f"连续出现次数最多的元素是:{result},一共连续出现了{max_streak}次")
测试你的示例
把你的示例输入8,然后依次输入6、1、6、4、4、4、6、6,代码会输出:连续出现次数最多的元素是:4,一共连续出现了3次,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Yacine Alloul
相关产品推荐
相关产品推荐

