#include <stdio.h>
#include <stdlib.h>
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
void number_of_days_needed_to_wait_to_get_warmer(int temperatures[],
int size,
int result[]) {
int *stack = malloc(size * sizeof(int));
int top = -1;
for (int i = 0; i < size; i++) {
while (top >= 0 && temperatures[i] > temperatures[stack[top]]) {
int index = stack[top--];
result[index] = i - index;
}
stack[++top] = i;
}
while (top >= 0) {
result[stack[top--]] = 0;
}
free(stack);
}
int main() {
int temperatures[] = {82, 84, 81, 58, 85, 89, 75, 71};
int size = sizeof(temperatures) / sizeof(temperatures[0]);
// 82 -> 84 = 1
// 84 -> 81 -> 58 -> 85 = 3
// 81 -> 58 -> 85 = 2
// 58 -> 85 = 1
// 85 -> 89 = 1
// 89 -> 75 -> 71 = 0
// 75 -> 71 = 0
int *result = malloc(size * sizeof(int));
if (!result) {
printf("Memory allocation failed\n");
return 1;
}
number_of_days_needed_to_wait_to_get_warmer(temperatures, size, result);
printArray(result, size);
free(result);
return 0;
}
/*
run:
1 3 2 1 1 0 0 0
*/