File tree 2 files changed +20
-17
lines changed
2 files changed +20
-17
lines changed Original file line number Diff line number Diff line change 6
6
struct Solution ;
7
7
8
8
impl Solution {
9
- fn has_lower_temp ( temperatures : & Vec < i32 > , stack : & Vec < usize > , temp : i32 ) -> bool {
10
- if stack. is_empty ( ) {
11
- false
12
- } else {
13
- let last_index = stack. iter ( ) . last ( ) . unwrap ( ) ;
14
- let last_temp = temperatures[ * last_index] ;
15
- last_temp < temp
16
- }
17
- }
18
9
19
10
pub fn daily_temperatures ( temperatures : Vec < i32 > ) -> Vec < i32 > {
20
- let mut stack = vec ! [ ] ;
21
- let mut result: Vec < i32 > = vec ! [ 0 ; temperatures. len( ) ] ;
22
-
23
- for ( i, temp) in temperatures. iter ( ) . enumerate ( ) {
24
- while Self :: has_lower_temp ( & temperatures, & stack, * temp) {
25
- let j: usize = stack. pop ( ) . unwrap ( ) ;
26
- result[ j] = i as i32 - j as i32 ;
11
+ let n = temperatures. len ( ) ;
12
+ let mut stack: Vec < usize > = Vec :: new ( ) ;
13
+ let mut result = vec ! [ 0 ; n] ;
14
+
15
+ for i in 0 ..n {
16
+ let current = temperatures[ i] ;
17
+
18
+ while !stack. is_empty ( ) {
19
+ let n = stack. len ( ) ;
20
+ let index = stack[ n-1 ] ;
21
+ let previous = temperatures[ index] ;
22
+ if current > previous {
23
+ result[ index] = ( i - index) as i32 ;
24
+ stack. pop ( ) ;
25
+ } else {
26
+ break ;
27
+ }
27
28
}
29
+
28
30
stack. push ( i) ;
29
31
}
30
32
31
33
result
32
34
}
35
+
33
36
}
34
37
35
38
#[ cfg( test) ]
Original file line number Diff line number Diff line change @@ -511,7 +511,7 @@ pub mod find_pivot_index; // 724 ✓
511
511
pub mod sentence_similarity; // 734 ✓
512
512
pub mod asteroid_collision; // 735 ✓
513
513
514
- pub mod daily_temperatures; // 739
514
+ pub mod daily_temperatures; // 739 ✓
515
515
pub mod delete_and_earn; // 740 ✓
516
516
517
517
pub mod network_delay_time; // 743 ✓
You can’t perform that action at this time.
0 commit comments