【问题标题】:Algorithm to replace integers in array by the nearest bigger integer on their right用右边最接近的较大整数替换数组中的整数的算法
【发布时间】:2015-11-22 15:18:11
【问题描述】:

你如何在 O(n) 时间内解决这个问题?

给定一个未排序的整数数组,设计算法来转换数组,使整数被其右边最接近的更大整数替换。如果它的右边没有更大的整数,则整数保持不变。例如下面的整数数组

2 1 4 5 3 6 7 9 4 8

应该变成

4 4 5 6 6 7 9 9 8 8

【问题讨论】:

  • 你确定有 O(n) 解决方案吗?
  • @sudomakeinstall2 有。算法其实很简单
  • @paul 如果你说的是orlp提供的算法,那应该是有误会了。
  • @cppgondnler 实际上非常接近。或者更准确地说,如果实施得当,您提出的算法应该完成这项工作,除了遍历和替换的元素需要额外的存储。

标签: arrays algorithm comparison


【解决方案1】:
  • 初始化整数栈

  • 从左到右。

  • 当元素较小时从堆栈中弹出,并用当前元素替换它

  • 将元素的 id 添加到堆栈

请注意,堆栈将严格递减。并且每个元素最多弹出/添加 1 次。因此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)

【讨论】:

  • 你早了一分钟并正确解释了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-04
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-29
相关资源
最近更新 更多