如何快速找到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
相关产品推荐
相关产品推荐

