Skip to content

Commit cabb394

Browse files
committed
feat: add solutions to lc problem: No.0739.Daily Temperatures
1 parent 472d3d6 commit cabb394

File tree

7 files changed

+116
-115
lines changed

7 files changed

+116
-115
lines changed

solution/0500-0599/0503.Next Greater Element II/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ func nextGreaterElements(nums []int) []int {
128128
stk = stk[:len(stk)-1]
129129
}
130130
stk = append(stk, i%n)
131-
}
131+
}
132132
return res
133133
}
134134
```

solution/0700-0799/0739.Daily Temperatures/README.md

+41-41
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@
1717

1818
<!-- 这里可写通用的实现逻辑 -->
1919

20-
栈实现,栈存放 T 中元素的的下标 i,结果用数组 res 存储。
20+
单调栈常见模型:找出每个数左/右边**离它最近的****比它大/小的数**。模板:
2121

22-
遍历 T,遍历到 `T[i]` 时:
23-
24-
- 若栈不为空,并且栈顶元素小于 `T[i]` 时,弹出栈顶元素 j,并且 `res[j]` 赋值为 `i - j`
25-
- 然后将 i 压入栈中。
26-
27-
最后返回结果数组 res 即可。
22+
```python
23+
stk = []
24+
for i in range(n):
25+
while stk and check(stk[-1], i):
26+
stk.pop()
27+
stk.append(i)
28+
```
2829

2930
<!-- tabs:start -->
3031

@@ -34,15 +35,14 @@
3435

3536
```python
3637
class Solution:
37-
def dailyTemperatures(self, T: List[int]) -> List[int]:
38-
n = len(T)
39-
res = [0 for _ in range(n)]
40-
s = []
41-
for i in range(n):
42-
while s and T[s[-1]] < T[i]:
43-
j = s.pop()
38+
def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
39+
res = [0] * len(temperatures)
40+
stk = []
41+
for i, t in enumerate(temperatures):
42+
while stk and temperatures[stk[-1]] < t:
43+
j = stk.pop()
4444
res[j] = i - j
45-
s.append(i)
45+
stk.append(i)
4646
return res
4747
```
4848

@@ -52,16 +52,16 @@ class Solution:
5252

5353
```java
5454
class Solution {
55-
public int[] dailyTemperatures(int[] T) {
56-
int n = T.length;
55+
public int[] dailyTemperatures(int[] temperatures) {
56+
int n = temperatures.length;
5757
int[] res = new int[n];
58-
Deque<Integer> s = new ArrayDeque<>();
58+
Deque<Integer> stk = new ArrayDeque<>();
5959
for (int i = 0; i < n; ++i) {
60-
while (!s.isEmpty() && T[s.peek()] < T[i]) {
61-
int j = s.pop();
60+
while (!stk.isEmpty() && temperatures[stk.peek()] < temperatures[i]) {
61+
int j = stk.pop();
6262
res[j] = i - j;
6363
}
64-
s.push(i);
64+
stk.push(i);
6565
}
6666
return res;
6767
}
@@ -75,37 +75,37 @@ class Solution {
7575
```cpp
7676
class Solution {
7777
public:
78-
vector<int> dailyTemperatures(vector<int>& T) {
79-
int n = T.size();
80-
vector<int> ans(n);
81-
stack<int> s;
82-
for(int i = 0; i < n; ++i) {
83-
while(!s.empty() && T[s.top()] < T[i]) {
84-
int pre = s.top();
85-
s.pop();
86-
ans[pre] = i - pre;
78+
vector<int> dailyTemperatures(vector<int> &temperatures) {
79+
int n = temperatures.size();
80+
vector<int> res(n);
81+
stack<int> stk;
82+
for (int i = 0; i < n; ++i)
83+
{
84+
while (!stk.empty() && temperatures[stk.top()] < temperatures[i])
85+
{
86+
res[stk.top()] = i - stk.top();
87+
stk.pop();
8788
}
88-
s.push(i);
89+
stk.push(i);
8990
}
90-
return ans;
91+
return res;
9192
}
9293
};
9394
```
9495
9596
### **Go**
9697
9798
```go
98-
func dailyTemperatures(T []int) []int {
99-
n := len(T)
100-
res := make([]int, n)
101-
stack := make([]int, 0)
102-
for i, v := range T {
103-
for len(stack) != 0 && T[stack[len(stack)-1]] < v {
104-
j := stack[len(stack)-1]
105-
stack = stack[:len(stack)-1]
99+
func dailyTemperatures(temperatures []int) []int {
100+
res := make([]int, len(temperatures))
101+
var stk []int
102+
for i, t := range temperatures {
103+
for len(stk) > 0 && temperatures[stk[len(stk)-1]] < t {
104+
j := stk[len(stk)-1]
106105
res[j] = i - j
106+
stk = stk[:len(stk)-1]
107107
}
108-
stack = append(stack, i)
108+
stk = append(stk, i)
109109
}
110110
return res
111111
}

solution/0700-0799/0739.Daily Temperatures/README_EN.md

+39-34
Original file line numberDiff line numberDiff line change
@@ -26,38 +26,43 @@ Each temperature will be an integer in the range <code>[30, 100]</code>.
2626

2727
## Solutions
2828

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+
2935
<!-- tabs:start -->
3036

3137
### **Python3**
3238

3339
```python
3440
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()
4247
res[j] = i - j
43-
s.append(i)
48+
stk.append(i)
4449
return res
4550
```
4651

4752
### **Java**
4853

4954
```java
5055
class Solution {
51-
public int[] dailyTemperatures(int[] T) {
52-
int n = T.length;
56+
public int[] dailyTemperatures(int[] temperatures) {
57+
int n = temperatures.length;
5358
int[] res = new int[n];
54-
Deque<Integer> s = new ArrayDeque<>();
59+
Deque<Integer> stk = new ArrayDeque<>();
5560
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();
5863
res[j] = i - j;
5964
}
60-
s.push(i);
65+
stk.push(i);
6166
}
6267
return res;
6368
}
@@ -71,37 +76,37 @@ class Solution {
7176
```cpp
7277
class Solution {
7378
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();
8389
}
84-
s.push(i);
90+
stk.push(i);
8591
}
86-
return ans;
92+
return res;
8793
}
8894
};
8995
```
9096
9197
### **Go**
9298
9399
```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]
102106
res[j] = i - j
107+
stk = stk[:len(stk)-1]
103108
}
104-
stack = append(stack, i)
109+
stk = append(stk, i)
105110
}
106111
return res
107112
}
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,18 @@
1-
/**
2-
* Author: Moriarty12138
3-
*/
41
class Solution {
52
public:
6-
vector<int> dailyTemperatures(vector<int>& T) {
7-
int n = T.size();
8-
vector<int> ans(n);
9-
stack<int> s;
10-
for(int i = 0; i < n; ++i) {
11-
while(!s.empty() && T[s.top()] < T[i]) {
12-
int pre = s.top();
13-
s.pop();
14-
ans[pre] = i - pre;
3+
vector<int> dailyTemperatures(vector<int> &temperatures) {
4+
int n = temperatures.size();
5+
vector<int> res(n);
6+
stack<int> stk;
7+
for (int i = 0; i < n; ++i)
8+
{
9+
while (!stk.empty() && temperatures[stk.top()] < temperatures[i])
10+
{
11+
res[stk.top()] = i - stk.top();
12+
stk.pop();
1513
}
16-
s.push(i);
14+
stk.push(i);
1715
}
18-
return ans;
16+
return res;
1917
}
20-
};
18+
};
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
1-
func dailyTemperatures(T []int) []int {
2-
n := len(T)
3-
res := make([]int, n)
4-
stack := make([]int, 0)
5-
for i, v := range T {
6-
for len(stack) != 0 && T[stack[len(stack)-1]] < v {
7-
j := stack[len(stack)-1]
8-
stack = stack[:len(stack)-1]
1+
func dailyTemperatures(temperatures []int) []int {
2+
res := make([]int, len(temperatures))
3+
var stk []int
4+
for i, t := range temperatures {
5+
for len(stk) > 0 && temperatures[stk[len(stk)-1]] < t {
6+
j := stk[len(stk)-1]
97
res[j] = i - j
8+
stk = stk[:len(stk)-1]
109
}
11-
stack = append(stack, i)
10+
stk = append(stk, i)
1211
}
1312
return res
14-
}
13+
}

solution/0700-0799/0739.Daily Temperatures/Solution.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
class Solution {
2-
public int[] dailyTemperatures(int[] T) {
3-
int n = T.length;
2+
public int[] dailyTemperatures(int[] temperatures) {
3+
int n = temperatures.length;
44
int[] res = new int[n];
5-
Deque<Integer> s = new ArrayDeque<>();
5+
Deque<Integer> stk = new ArrayDeque<>();
66
for (int i = 0; i < n; ++i) {
7-
while (!s.isEmpty() && T[s.peek()] < T[i]) {
8-
int j = s.pop();
7+
while (!stk.isEmpty() && temperatures[stk.peek()] < temperatures[i]) {
8+
int j = stk.pop();
99
res[j] = i - j;
1010
}
11-
s.push(i);
11+
stk.push(i);
1212
}
1313
return res;
1414
}
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
class Solution:
2-
def dailyTemperatures(self, T: List[int]) -> List[int]:
3-
n = len(T)
4-
res = [0 for _ in range(n)]
5-
s = []
6-
for i in range(n):
7-
while s and T[s[-1]] < T[i]:
8-
j = s.pop()
2+
def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
3+
res = [0] * len(temperatures)
4+
stk = []
5+
for i, t in enumerate(temperatures):
6+
while stk and temperatures[stk[-1]] < t:
7+
j = stk.pop()
98
res[j] = i - j
10-
s.append(i)
9+
stk.append(i)
1110
return res

0 commit comments

Comments
 (0)