Arrays 将数组中的整数替换为其右侧最近的较大整数的算法
你如何在O(n)时间内解决这个问题 给定一个未排序的整数数组,设计算法对数组进行变换,使整数替换为其右侧最近的较大整数。如果右边没有更大的整数,则该整数保持不变。例如,下面的整数数组Arrays 将数组中的整数替换为其右侧最近的较大整数的算法,arrays,algorithm,comparison,Arrays,Algorithm,Comparison,你如何在O(n)时间内解决这个问题 给定一个未排序的整数数组,设计算法对数组进行变换,使整数替换为其右侧最近的较大整数。如果右边没有更大的整数,则该整数保持不变。例如,下面的整数数组 2 1 4 5 3 6 7 9 4 8 应该成为 4 4 5 6 6 7 9 9 8 8 初始化整数堆栈 2 1 4 5 3 6 7 9 4 8 从左到右 当元素较小时从堆栈中弹出,并将其替换为当前元素 将元素的id添加到堆栈 请注意,堆栈将严格减少。每个元素最多弹出/添加1次。因此O(N) Python
2 1 4 5 3 6 7 9 4 8
应该成为
4 4 5 6 6 7 9 9 8 8
- 初始化整数堆栈
2 1 4 5 3 6 7 9 4 8
O(N)
Python中的示例代码:
l = [2, 1, 4, 5, 3, 6, 7, 9, 4, 8]
s = [0]
for i in range(1, len(l)):
while s and l[i] > l[s[-1]]:
l[s.pop()] = l[i]
s.append(i)
你确定有O(n)解决方案吗?@sudomakeinstall2有。这个算法实际上非常简单trivial@paul如果你指的是orlp提供的算法,那么应该有一个误解。@cppgondler它实际上非常接近。或者更准确地说,如果实施得当,您提出的算法应该可以完成这项工作,但被遍历和替换的元素需要额外的存储空间。您在一分钟前就对其进行了适当的解释。