Skip to content

Commit 37d2c60

Browse files
author
vitalish
committed
Daily Temperatures
1 parent 09bdf91 commit 37d2c60

File tree

2 files changed

+80
-0
lines changed

2 files changed

+80
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.vitalish.leetcode.stack;
2+
3+
import java.util.Stack;
4+
5+
/**
6+
* Daily Temperatures
7+
*
8+
* @see https://neetcode.io/problems/daily-temperatures
9+
*/
10+
public class DailyTemperatures {
11+
12+
// 0(n^2)
13+
public int[] dailyTemperatures(int[] temperatures) {
14+
int[] result = new int[temperatures.length];
15+
16+
for (int i = 0; i < temperatures.length; i++) {
17+
int j = i;
18+
int daysCount = 0;
19+
while (j < temperatures.length && temperatures[i] >= temperatures[j]) {
20+
daysCount++;
21+
j++;
22+
}
23+
if (j == temperatures.length) {
24+
result[i] = 0;
25+
} else {
26+
result[i] = daysCount;
27+
}
28+
}
29+
return result;
30+
}
31+
32+
// O(n)
33+
public int[] dailyTemperatures2(int[] temperatures) {
34+
int[] result = new int[temperatures.length];
35+
Stack<Integer> stack = new Stack<>();
36+
37+
for (int i = 0; i < temperatures.length; i++) {
38+
while (!stack.empty() && temperatures[i] > temperatures[stack.peek()]) {
39+
int j = stack.pop();
40+
result[j] = i - j;
41+
}
42+
stack.push(i);
43+
}
44+
return result;
45+
}
46+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.vitalish.leetcode.stack;
2+
3+
import org.junit.jupiter.params.ParameterizedTest;
4+
import org.junit.jupiter.params.provider.Arguments;
5+
import org.junit.jupiter.params.provider.MethodSource;
6+
7+
import java.util.stream.Stream;
8+
9+
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
10+
11+
class DailyTemperaturesTest {
12+
13+
private final DailyTemperatures dailyTemperatures = new DailyTemperatures();
14+
15+
@ParameterizedTest
16+
@MethodSource("arguments")
17+
void calcDailyTemperatures(int[] temperatures, int[] expectedResult) {
18+
assertArrayEquals(expectedResult, dailyTemperatures.dailyTemperatures(temperatures));
19+
}
20+
21+
@ParameterizedTest
22+
@MethodSource("arguments")
23+
void calcDailyTemperatures2(int[] temperatures, int[] expectedResult) {
24+
assertArrayEquals(expectedResult, dailyTemperatures.dailyTemperatures2(temperatures));
25+
}
26+
27+
28+
private static Stream<Arguments> arguments() {
29+
return Stream.of(
30+
Arguments.of(new int[]{30, 38, 30, 36, 35, 40, 28}, new int[]{1, 4, 1, 2, 1, 0, 0}),
31+
Arguments.of(new int[]{22, 21, 20}, new int[]{0, 0, 0})
32+
);
33+
}
34+
}

0 commit comments

Comments
 (0)