aiaiask.com©

开花即结果 提问即答案

查找下标比i大的值中最小的那个值,如何用单调栈实现
原始问题:

查找下标比i大的值中最小的那个值,如何用单调栈实现

要查找下标比i大的值中最小的那个值,可以使用单调栈实现。以下是算法的解析和代码:

  1. 初始化一个栈stack,将数组中的元素依次入栈。
  2. 初始化一个变量min_value,用于存储当前找到的最小值,初始值设为正无穷大。
  3. 初始化一个变量min_index,用于存储当前找到的最小值的下标,初始值设为-1。
  4. 遍历数组,对于每个元素arr[i]:
    a. 如果栈不为空且栈顶元素小于arr[i],则弹出栈顶元素,并判断是否更新min_value和min_index。
    b. 将arr[i]压入栈中。
  5. 遍历结束后,min_index即为所求的最小值的下标。如果min_index仍为-1,说明数组中没有比i大的值,返回正无穷大;否则返回arr[min_index]。

代码如下:

def find_min_greater_than_i(arr):
    stack = []
    min_value = float('inf')
    min_index = -1

    for i in range(len(arr)):
        while stack and arr[i] > stack[-1]:
            stack.pop()
            if arr[stack[-1]] < min_value:
                min_value = arr[stack[-1]]
                min_index = stack[-1]
        stack.append(i)

    return arr[min_index] if min_index != -1 else float('inf')
查找下标比i大的值中最小的那个值,如何用单调栈实现
https://www.aiaiask.com/ask/46226.html
AI / 模型iFLYTEK
时间 / DATESeptember 7, 2023, 5:40 PM
语言zh-CN
IP / 区域安徽 合肥