20240206 Finished
This commit is contained in:
		
							
								
								
									
										49
									
								
								src/problem/lcp30_magic_tower.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								src/problem/lcp30_magic_tower.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
pub struct Solution {}
 | 
			
		||||
 | 
			
		||||
use std::collections::BinaryHeap;
 | 
			
		||||
use std::cmp::Reverse;
 | 
			
		||||
 | 
			
		||||
impl Solution {
 | 
			
		||||
    pub fn magic_tower(nums: Vec<i32>) -> i32 {
 | 
			
		||||
        let mut heap = BinaryHeap::new();
 | 
			
		||||
 | 
			
		||||
        let mut count = 0;
 | 
			
		||||
        let (mut now, mut delay) = (1i64, 0i64);
 | 
			
		||||
 | 
			
		||||
        for num in nums {
 | 
			
		||||
            if num < 0 {
 | 
			
		||||
                heap.push(Reverse(num));
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            now += num as i64;
 | 
			
		||||
            if now <= 0 {
 | 
			
		||||
                count += 1;
 | 
			
		||||
 | 
			
		||||
                let m = heap.pop().unwrap().0 as i64;
 | 
			
		||||
                now -= m;
 | 
			
		||||
                delay += m;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        now += delay;
 | 
			
		||||
 | 
			
		||||
        if now <= 0 {
 | 
			
		||||
            -1
 | 
			
		||||
        } else {
 | 
			
		||||
            count
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
mod tests {
 | 
			
		||||
    use super::*;
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn test_lcp30() {
 | 
			
		||||
        assert_eq!(Solution::magic_tower(
 | 
			
		||||
            vec![100,100,100,-250,-60,-140,-50,-50,100,150]), 1);
 | 
			
		||||
        assert_eq!(Solution::magic_tower(
 | 
			
		||||
            vec![-200,-300,400,0]), -1);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -38,4 +38,5 @@ mod lcp24_nums_game;
 | 
			
		||||
mod p1686_stone_game_vi;
 | 
			
		||||
mod p1690_stone_game_vii;
 | 
			
		||||
mod p292_nim_game;
 | 
			
		||||
mod p1696_jump_game_vi;
 | 
			
		||||
mod p1696_jump_game_vi;
 | 
			
		||||
mod lcp30_magic_tower;
 | 
			
		||||
		Reference in New Issue
	
	Block a user