Skip to content

Latest commit

 

History

History
38 lines (32 loc) · 1.47 KB

1744.你能在你最喜欢的那天吃到你最喜欢的糖果吗?.md

File metadata and controls

38 lines (32 loc) · 1.47 KB

解题关键点

  • 题目描述得非常麻烦,其实解题关键是以下两点,假设目标类型、目标日期、目标数量分别为 tp、day、num
    1. 每天吃 1 颗,不能在第 day 天之前吃完第 tp 种
    2. 每天吃 num 颗,不能到第 day 天还吃不到第 tp 种

代码

impl Solution {
    pub fn can_eat(candies_count: Vec<i32>, queries: Vec<Vec<i32>>) -> Vec<bool> {
        let clen = candies_count.len();
        // 先统计每种糖果之前的数量
        // 因为最后涉及乘法,所以类型不能是 i32
        // 最后需要匹配 tp 和 tp + 1,所以这里比 candies_count 多 1 位,减少一个 if 判断
        let mut count_map: Vec<i64> = vec![0; clen + 1];
        for i in 0..clen {
            count_map[i + 1] = count_map[i] + candies_count[i] as i64;
        }

        // Vec::with_capacity 可以创建指定长度的空向量
        let mut res: Vec<bool> = Vec::with_capacity(queries.len());
        // 本来这里用了 .into_iter().map().collect(),但是效率比直接循环要低。
        for v in queries {
            let tp = v[0] as usize;
            // 这里踩了坑,因为是从第 0 天开始吃的,所以日期需要 +1
            let day = v[1] as i64 + 1;
            let num = v[2] as i64;
            res.push(day <= count_map[tp + 1] && day * num > count_map[tp]);
        }
        res
    }
}

测试用例

测试用例就不提供了,官方有一个超大的测试用例……