📅  最后修改于: 2023-12-03 15:39:10.517000             🧑  作者: Mango
该 C 程序用于在给定数组中寻找每个元素的下一个更大元素。所谓“更大元素”,指的是在数组中比当前元素大的下一个元素。如果数组中没有更大元素,则该元素被记为 -1。该程序支持任意长度的数组,并且时间复杂度为 O(n)。
find_next_greater_element
中。int* find_next_greater_element(int* arr, int size);
int* result = find_next_greater_element(arr, size);
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)。该算法可以用于解决多个算法问题,例如查找下一个更大/小元素、找到最近更大/小的元素等。