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

HackerRank是否评估代码速度?我的饼干问题解法为何不通过?

饼干甜度混合问题求解疑问

问题描述

Jesse喜欢饼干,希望所有饼干的甜度大于阈值k。为此,需反复混合甜度最低的两块饼干,生成的新饼干甜度为:甜度 = 最不甜的饼干 + 2×第二不甜的饼干。重复此操作直到所有饼干甜度≥k。
给定若干饼干的甜度值,求所需的最少操作次数;若无法达成则返回-1。

示例:
最小的两个值被移除,将新值放回数组……最终经过若干次迭代后所有值≥k,返回操作次数。

函数说明:完成编辑器中的cookies函数。
cookies参数:
int k:阈值
int A[n]:甜度数组
返回值:
int:所需操作次数或-1

我的Python代码

def cookies(k, A):
    i = 0
    while True:
        A.sort()
        print(A)
        if A[0] >= k:
            break
        elif len(A) < 2:
            i = -1
            break
        n1 = A.pop(0)
        n2 = A.pop(0)
        new_cookie = (n1 + 2*n2)
        A.insert(0, new_cookie)
        i += 1
    return i

疑问与解答

1. HackerRank是否会评估代码速度?

是的,HackerRank的算法题会严格评估代码的时间复杂度,超时的测试用例会直接判定不通过。

2. 我的代码是否不够高效?

你的代码效率存在明显问题,核心原因有两点:

  • 每次循环都执行排序:每次A.sort()的时间复杂度是O(n log n),若需要m次混合操作,整体时间复杂度会达到O(m*n log n),面对大规模输入时必然超时。
  • 列表首尾操作效率低:列表的pop(0)和insert(0)是O(n)复杂度的操作,因为需要移动后续所有元素,进一步放大了性能损耗。

正确的优化方案是使用最小堆(优先队列):Python的heapq模块可以实现最小堆,每次取最小两个元素、合并后放回堆的操作均为O(log n)复杂度,整体时间复杂度为O(n log n + m log n),能高效处理大规模数据。

3. 是否存在排序导致溢出的边界情况?

Python的整数支持任意精度,不会出现整数溢出问题,这一点无需担心。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 11:31:03