LeetCode-in-Java

739. Daily Temperatures

Medium

Given an array of integers temperatures represents the daily temperatures, return an array answer such that answer[i] is the number of days you have to wait after the ith day to get a warmer temperature. If there is no future day for which this is possible, keep answer[i] == 0 instead.

Example 1:

Input: temperatures = [73,74,75,71,69,72,76,73]

Output: [1,1,4,2,1,1,0,0]

Example 2:

Input: temperatures = [30,40,50,60]

Output: [1,1,1,0]

Example 3:

Input: temperatures = [30,60,90]

Output: [1,1,0]

Constraints:

Solution

@SuppressWarnings("java:S135")
public class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        int[] sol = new int[temperatures.length];
        sol[temperatures.length - 1] = 0;
        for (int i = sol.length - 2; i >= 0; i--) {
            int j = i + 1;
            while (j <= sol.length) {
                if (temperatures[i] < temperatures[j]) {
                    sol[i] = j - i;
                    break;
                } else {
                    if (sol[j] == 0) {
                        break;
                    }
                    j = j + sol[j];
                }
            }
        }
        return sol;
    }
}

Time Complexity (Big O Time):

The program uses a nested loop structure to calculate the number of days until a warmer day for each temperature in the array. Here’s the breakdown of the time complexity:

Therefore, the overall time complexity of the program is O(n) in the worst case, where ‘n’ is the length of the temperatures array.

Space Complexity (Big O Space):

The space complexity of the program is determined by the additional data structures used, including the integer array sol.

Therefore, the overall space complexity of the program is O(n) due to the integer array sol.

In summary, the provided program has a time complexity of O(n) in the worst case and a space complexity of O(n), where ‘n’ is the length of the temperatures array. This improved time complexity compared to the previous analysis is due to the fact that each element in the array is processed at most twice.