How to get the number of days needed to wait after a day (a[i]) gets warmer given an array of temperatures in C

1 Answer

0 votes
#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 

*/

 



answered 19 hours ago by avibootz

Related questions

...