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

如何快速找到NumPy数组每个元素右侧(含自身)的最小元素?

数组每个元素右侧(含自身)最小值的高效实现

要实现这个需求,最快速且简洁的方式是逆向遍历+维护当前最小值,时间复杂度仅为O(n),远优于正向切片求最小值的O(n²)方案。

方法一:生成新数组(不修改原数组)

从右往左遍历原数组,记录当前遇到的最小值,每次将该最小值存入结果列表,最后反转结果列表得到正确顺序:

a = [1,4,3,6,4]
result = []
current_min = float('inf')

for num in reversed(a):
    current_min = min(num, current_min)
    result.append(current_min)

result = result[::-1]
print(result)  # 输出: [1, 3, 3, 4, 4]

方法二:原地修改数组(节省空间)

如果允许修改原数组,可以直接在原数组上更新,空间复杂度降为O(1):

a = [1,4,3,6,4]
current_min = float('inf')

for i in range(len(a)-1, -1, -1):
    current_min = min(a[i], current_min)
    a[i] = current_min

print(a)  # 输出: [1, 3, 3, 4, 4]

不推荐的简洁写法(效率低)

如果追求极致代码简洁但不考虑性能,也可以用列表推导式,但大数组下会非常慢:

a = [1,4,3,6,4]
result = [min(a[i:]) for i in range(len(a))]
print(result)  # 输出: [1, 3, 3, 4, 4]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 16:09:56