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

如何获取总长度大于n的最少元素?循环实现的效率与优化方案探讨

关于获取总长度大于n的最少元素的效率问题

你的原代码时间复杂度已经是最优的了——它的时间复杂度是O(k),其中k是满足“总长度大于n”所需的最少元素个数。因为你必须依次累加元素长度,直到总和超过n,没有办法跳过任何元素提前得到结果,所以从算法层面来说,这已经是效率最高的实现方式。

不过可以写出更简洁的代码,逻辑更清晰,同时保持相同的效率:

更简洁的写法(效率一致)

用enumerate简化索引维护

原代码里手动维护i变量有点繁琐,可以用enumerate直接获取索引:

a = ['a', 'bc', 'def', 'hijk']
n = 5

total_length = 0
for idx, s in enumerate(a):
    total_length += len(s)
    if total_length > n:
        print(idx)  # 输出2,表示第3个元素
        break

用itertools.accumulate实现累加

借助itertools的accumulate函数可以直接生成累加序列,代码更紧凑:

import itertools

a = ['a', 'bc', 'def', 'hijk']
n = 5

# 生成每个元素的长度,再计算累加值
cumulative_lengths = itertools.accumulate(len(s) for s in a)
for idx, total in enumerate(cumulative_lengths):
    if total > n:
        print(idx)  # 输出2
        break

这些写法只是让代码更易读、更简洁,效率和你的原代码完全一致——本质都是逐个遍历元素并累加长度,直到满足终止条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:42:21