如何在有序数组中不用map/hashtable,仅用索引判断元素出现次数是否一致?Python实现
有序数组元素出现次数一致性检查(无哈希表实现)
给定有序数组,要求不使用哈希表/字典,仅通过索引遍历验证数组中所有不同数字的出现次数是否完全一致。
示例
- 输入
[1,1,1,2,2,3,3,4,5,5]→ 返回False(1出现3次,2、3、5出现2次,4出现1次,次数不统一) - 输入
[1,1,3,3,6,6]→ 返回True(所有元素均出现2次)
你提供的实现逻辑可行,但可以简化冗余逻辑、减少变量,以下是更简洁的Python实现:
def has_same_occurrence(deck): if not deck: return True # 空数组默认符合条件,可根据实际需求调整 # 确定第一个元素的出现次数作为基准 base_count = 1 while base_count < len(deck) and deck[base_count] == deck[0]: base_count += 1 # 遍历后续元素,检查每个元素的出现次数是否匹配基准 i = base_count while i < len(deck): current_num = deck[i] current_count = 0 # 统计当前元素的连续出现次数 while i < len(deck) and deck[i] == current_num: current_count += 1 i += 1 if current_count != base_count: return False return True
实现思路
- 先处理空数组的边界场景(可根据业务需求修改返回值)
- 先统计第一个元素的连续出现次数,作为所有元素必须满足的基准次数
- 遍历数组,逐个统计后续每个不同元素的连续出现次数,一旦发现次数与基准不符,直接返回
False - 遍历完成后所有元素次数均符合要求,返回
True
优化点说明
- 移除了原代码中冗余的
preNum、preCount等变量,逻辑更直观易懂 - 用嵌套循环直接统计连续元素的出现次数,避免了循环内的多分支判断
- 边界情况处理更清晰明确
内容的提问来源于stack exchange,提问作者Ames ISU
相关产品推荐
相关产品推荐

