LeetCode 2391. 收集垃圾的最少总时间

Problem: 2391. 收集垃圾的最少总时间

问题分解

我们将这个问题分解为以下几个小问题:

  1. 计算每种垃圾(金属、纸、玻璃)在每个房子中的数量。
  2. 确定每种垃圾车最后到达的房子。
  3. 计算每种垃圾车行驶的总时间。
  4. 计算每种垃圾车收拾垃圾的总时间。
  5. 返回所有垃圾车花费时间的总和。

解决问题

现在让我们逐步解答这些问题:

问题1:计算每种垃圾在每个房子中的数量?

我们可以遍历每个房子的垃圾字符串,统计每种垃圾的数量。

问题2:确定每种垃圾车最后到达的房子?

我们可以在统计垃圾数量的同时,记录每种垃圾车最后到达的房子。

问题3:计算每种垃圾车行驶的总时间?

我们需要遍历travel数组,对于每种垃圾车,如果当前房子不是它最后到达的房子,那么它需要行驶到下一个房子。

问题4:计算每种垃圾车收拾垃圾的总时间?

在统计垃圾数量的过程中,我们已经计算了每种垃圾车收拾垃圾的总时间。

问题5:返回所有垃圾车花费时间的总和?

我们将每种垃圾车的行驶时间和收拾垃圾的时间相加,得到每种垃圾车的总时间,然后将这些时间相加得到最终答案。

解题答案

根据以上分析,我们可以实现以下代码:

cpp 复制代码
class Solution {
public:
    int garbageCollection(vector<string>& garbage, vector<int>& travel) {
        int n = garbage.size();
        int metalTime = 0, paperTime = 0, glassTime = 0;
        int metalLastHouse = 0, paperLastHouse = 0, glassLastHouse = 0;
        
        // 统计每种垃圾的数量和最后到达的房子
        for (int i = 0; i < n; ++i) {
            for (char c : garbage[i]) {
                if (c == 'M') {
                    metalTime++;
                    metalLastHouse = i;
                } else if (c == 'P') {
                    paperTime++;
                    paperLastHouse = i;
                } else if (c == 'G') {
                    glassTime++;
                    glassLastHouse = i;
                }
            }
        }
        
        // 计算每种垃圾车的行驶时间
        for (int i = 0; i < n - 1; ++i) {
            if (i < metalLastHouse) {
                metalTime += travel[i];
            }
            if (i < paperLastHouse) {
                paperTime += travel[i];
            }
            if (i < glassLastHouse) {
                glassTime += travel[i];
            }
        }
        
        // 返回总时间
        return metalTime + paperTime + glassTime;
    }
};

这段代码首先统计了每种垃圾的数量和最后到达的房子,然后计算了每种垃圾车的行驶时间,最后返回了总时间。这个解法的时间复杂度是O(n),其中n是房子的数量。

相关推荐
洛水水6 分钟前
【力扣100题】76.搜索插入位置
数据结构·算法·leetcode
Techblog of HaoWANG9 分钟前
智巡守卫:多模态巡检智能体算法服务端设计与实现——基于Ollama+Qwen3.5的自动化巡检报告生成系统
运维·人工智能·算法·目标检测·自动化·边缘计算
小蒋学算法20 分钟前
算法-灌溉花园的最少龙头数目-贪心
算法
满怀冰雪20 分钟前
第07篇-差分算法-高效处理区间修改问题
数据结构·算法
KaMeidebaby22 分钟前
卡梅德生物技术快报|重组蛋白的表达和纯化:工艺调试全记录:大肠杆菌体系重组蛋白的表达和纯化参数标定(肠激酶轻链案例)
前端·人工智能·算法·数据挖掘·数据分析
ZPC821038 分钟前
如何将机械臂末端定位精度提升至微米如何进行标定
人工智能·算法·机器人
wabs66640 分钟前
关于动态规划【力扣343.整数拆分的递推公式怎么理解?】
算法·leetcode·动态规划
测试狗科研平台40 分钟前
第一性原理CO2还原反应计算流程和软件推荐
科技·算法·云计算
SEO_juper41 分钟前
2026 谷歌 SEO&GEO 常见问题合集:收录、排名、内容、技术全解析
算法·谷歌·常见问题·seo·跨境电商·外贸·geo
叫我:松哥1 小时前
基于卷积神经网络的静态手势语识别算法,在测试集上的识别准确率达到97.5%
人工智能·python·深度学习·神经网络·算法·cnn