leetcode/src/problem/p2073_time_needed_to_buy_tickets.rs
2024-10-24 09:08:13 +08:00

50 lines
1.1 KiB
Rust

/**
* [2073] Time Needed to Buy Tickets
*/
pub struct Solution {}
// submission codes start here
impl Solution {
pub fn time_required_to_buy(tickets: Vec<i32>, k: i32) -> i32 {
use std::collections::VecDeque;
let k = k as usize;
let mut queue = VecDeque::with_capacity(tickets.len());
for (i, &v) in tickets.iter().enumerate() {
queue.push_back(if i == k { (v, true) } else { (v, false) });
}
let mut second = 0;
loop {
let head = queue.pop_front().unwrap();
second += 1;
if head.0 == 1 {
// 卖完了
if head.1 {
break;
}
} else {
queue.push_back((head.0 - 1, head.1));
}
}
second
}
}
// submission codes end
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_2073() {
assert_eq!(6, Solution::time_required_to_buy(vec![2, 3, 2], 2));
assert_eq!(8, Solution::time_required_to_buy(vec![5, 1, 1, 1], 0));
}
}