You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hackerrank Migratory Birds代码遇神秘边界用例失败求排查

解决Hackerrank Migratory Birds问题的代码错误分析

你的代码存在的核心问题是:当多个鸟类ID的出现次数同为最大值时,无法保证返回其中最小的ID。

问题原因

原代码在遍历统计字典时,仅在遇到次数大于当前最大值时更新结果。但当出现多个ID次数相等且都是最大值的情况时,原代码会保留第一个遍历到的ID,而字典的遍历顺序(尤其是Python 3.7之前的版本)是不确定的,无法保证这个ID是所有最大次数ID里最小的那个。比如测试用例[2,2,1,1,3],若字典先遍历到2,代码会返回2,但正确答案应该是1。

修正方案

方案1:遍历字典时增加相等次数的判断

在遍历统计结果时,当遇到次数等于当前最大值的ID,比较并保留更小的ID:

def migratoryBirds(arr):
    _dict = {}
    for key in arr:
        if key not in _dict:
            _dict[key] = 1
        else:
            _dict[key] += 1
    _max_key = None
    _max_cnt = 0
    for key in _dict:
        current_cnt = _dict[key]
        if current_cnt > _max_cnt:
            _max_key = key
            _max_cnt = current_cnt
        elif current_cnt == _max_cnt:
            if key < _max_key:
                _max_key = key
    return _max_key

方案2:利用排序实现更简洁的逻辑

通过对统计结果排序,先按次数降序,次数相同则按ID升序,直接取第一个元素的ID:

def migratoryBirds(arr):
    count = {}
    for bird in arr:
        count[bird] = count.get(bird, 0) + 1
    # 排序规则:优先按次数从高到低,其次按ID从小到大
    sorted_birds = sorted(count.items(), key=lambda x: (-x[1], x[0]))
    return sorted_birds[0][0]

方案3:使用collections.Counter简化统计

借助Python内置的Counter工具类,可以更简洁地完成统计和排序:

from collections import Counter

def migratoryBirds(arr):
    count = Counter(arr)
    # 按次数降序、ID升序排序后取第一个元素
    return sorted(count, key=lambda x: (-count[x], x))[0]

内容的提问来源于stack exchange,提问作者CaTx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 19:09:23