Daily Temperatures
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]
BruteForce :
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int n=temperatures.length;
int [] result= new int [n];
for(int i=0;i<n-1;i++)
{
int count=0;
for(int j=i+1;j<n;j++)
{
if(temperatures[j] > temperatures[i])
{
count=j-i;
result[i]=count;
break;
}
}
}
return result;
}
}
Optimized Version (Using Stack) — O(n) time:
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int n = temperatures.length;
int[] result = new int[n];
Stack<Integer> stack = new Stack<>(); // stores indices
for (int i = 0; i < n; i++) {
while (!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]) {
int prevIndex = stack.pop();
result[prevIndex] = i - prevIndex;
}
stack.push(i);
}
return result;
}
}
Comments
Post a Comment