@@ -26,38 +26,43 @@ Each temperature will be an integer in the range <code>[30, 100]</code>.
26
26
27
27
## Solutions
28
28
29
+ Easy solution with stack.
30
+
31
+ Everytime a higher temperature is found, we update answer of the peak one in the stack.
32
+
33
+ If the day with higher temperature is not found, we leave the ans to be the default ` 0 ` .
34
+
29
35
<!-- tabs:start -->
30
36
31
37
### ** Python3**
32
38
33
39
``` python
34
40
class Solution :
35
- def dailyTemperatures (self , T : List[int ]) -> List[int ]:
36
- n = len (T)
37
- res = [0 for _ in range (n)]
38
- s = []
39
- for i in range (n):
40
- while s and T[s[- 1 ]] < T[i]:
41
- j = s.pop()
41
+ def dailyTemperatures (self , temperatures : List[int ]) -> List[int ]:
42
+ res = [0 ] * len (temperatures)
43
+ stk = []
44
+ for i, t in enumerate (temperatures):
45
+ while stk and temperatures[stk[- 1 ]] < t:
46
+ j = stk.pop()
42
47
res[j] = i - j
43
- s .append(i)
48
+ stk .append(i)
44
49
return res
45
50
```
46
51
47
52
### ** Java**
48
53
49
54
``` java
50
55
class Solution {
51
- public int [] dailyTemperatures (int [] T ) {
52
- int n = T . length;
56
+ public int [] dailyTemperatures (int [] temperatures ) {
57
+ int n = temperatures . length;
53
58
int [] res = new int [n];
54
- Deque<Integer > s = new ArrayDeque<> ();
59
+ Deque<Integer > stk = new ArrayDeque<> ();
55
60
for (int i = 0 ; i < n; ++ i) {
56
- while (! s . isEmpty() && T [s . peek()] < T [i]) {
57
- int j = s . pop();
61
+ while (! stk . isEmpty() && temperatures[stk . peek()] < temperatures [i]) {
62
+ int j = stk . pop();
58
63
res[j] = i - j;
59
64
}
60
- s . push(i);
65
+ stk . push(i);
61
66
}
62
67
return res;
63
68
}
@@ -71,37 +76,37 @@ class Solution {
71
76
``` cpp
72
77
class Solution {
73
78
public:
74
- vector<int > dailyTemperatures(vector<int >& T) {
75
- int n = T.size();
76
- vector<int > ans(n);
77
- stack<int > s;
78
- for(int i = 0; i < n; ++i) {
79
- while(!s.empty() && T[ s.top()] < T[ i] ) {
80
- int pre = s.top();
81
- s.pop();
82
- ans[ pre] = i - pre;
79
+ vector<int > dailyTemperatures(vector<int > &temperatures) {
80
+ int n = temperatures.size();
81
+ vector<int > res(n);
82
+ stack<int > stk;
83
+ for (int i = 0; i < n; ++i)
84
+ {
85
+ while (!stk.empty() && temperatures[ stk.top()] < temperatures[ i] )
86
+ {
87
+ res[ stk.top()] = i - stk.top();
88
+ stk.pop();
83
89
}
84
- s .push(i);
90
+ stk .push(i);
85
91
}
86
- return ans ;
92
+ return res ;
87
93
}
88
94
};
89
95
```
90
96
91
97
### **Go**
92
98
93
99
```go
94
- func dailyTemperatures(T []int) []int {
95
- n := len(T)
96
- res := make([]int, n)
97
- stack := make([]int, 0)
98
- for i, v := range T {
99
- for len(stack) != 0 && T[stack[len(stack)-1]] < v {
100
- j := stack[len(stack)-1]
101
- stack = stack[:len(stack)-1]
100
+ func dailyTemperatures(temperatures []int) []int {
101
+ res := make([]int, len(temperatures))
102
+ var stk []int
103
+ for i, t := range temperatures {
104
+ for len(stk) > 0 && temperatures[stk[len(stk)-1]] < t {
105
+ j := stk[len(stk)-1]
102
106
res[j] = i - j
107
+ stk = stk[:len(stk)-1]
103
108
}
104
- stack = append(stack , i)
109
+ stk = append(stk , i)
105
110
}
106
111
return res
107
112
}
0 commit comments