Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 将数组中的整数替换为其右侧最近的较大整数的算法_Arrays_Algorithm_Comparison - Fatal编程技术网

Arrays 将数组中的整数替换为其右侧最近的较大整数的算法

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

你如何在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中的示例代码:

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它实际上非常接近。或者更准确地说,如果实施得当,您提出的算法应该可以完成这项工作,但被遍历和替换的元素需要额外的存储空间。您在一分钟前就对其进行了适当的解释。