📜  寻找下一个更大元素的 C 程序(1)

📅  最后修改于: 2023-12-03 15:39:10.517000             🧑  作者: Mango

寻找下一个更大元素的 C 程序

简介

该 C 程序用于在给定数组中寻找每个元素的下一个更大元素。所谓“更大元素”,指的是在数组中比当前元素大的下一个元素。如果数组中没有更大元素,则该元素被记为 -1。该程序支持任意长度的数组,并且时间复杂度为 O(n)。

使用方法
  1. 将要查找元素的数组传入函数 find_next_greater_element 中。
int* find_next_greater_element(int* arr, int size);
  1. 函数返回值为一个新的 int 类型数组,其长度等于传入的数组长度。
int* result = find_next_greater_element(arr, size);
  1. 遍历结果数组即可得到每个元素的下一个更大元素。
for (int i = 0; i < size; i++) {
    printf("下一个更大元素:%d", result[i]);
}
代码实现
#include <stdio.h>
#include <stdlib.h>

int* find_next_greater_element(int* arr, int size) {
    int* result = (int*) malloc(size * sizeof(int));
    int* stack = (int*) malloc(size * sizeof(int));
    int top = -1;

    for (int i = size - 1; i >= 0; i--) {
        while (top >= 0 && arr[i] >= stack[top]) {
            top--;
        }

        result[i] = top >= 0 ? stack[top] : -1;
        stack[++top] = arr[i];
    }

    free(stack);
    return result;
}

该函数实现了在一个数组中查找每个元素的下一个更大元素。该算法使用单调栈,遍历数组时,将元素按从大到小的顺序压入栈中。如果当前元素比栈顶元素大,则将栈顶元素弹出。最后,每个元素的下一个更大元素就是栈顶元素。

总结

该 C 程序实现了在一个数组中查找每个元素的下一个更大元素。该算法使用单调栈,时间复杂度为 O(n),空间复杂度为 O(n)。该算法可以用于解决多个算法问题,例如查找下一个更大/小元素、找到最近更大/小的元素等。