一次遍历,LeetCode 2391. 收集垃圾的最少总时间

一、题目

1、题目描述

给你一个下标从 0 开始的字符串数组 garbage ,其中 garbage[i] 表示第 i 个房子的垃圾集合。garbage[i] 只包含字符 'M' ,'P' 和 'G' ,但可能包含多个相同字符,每个字符分别表示一单位的金属、纸和玻璃。垃圾车收拾 一 单位的任何一种垃圾都需要花费 1 分钟。

同时给你一个下标从 0 开始的整数数组 travel ,其中 travel[i] 是垃圾车从房子 i 行驶到房子 i + 1 需要的分钟数。

城市里总共有三辆垃圾车,分别收拾三种垃圾。每辆垃圾车都从房子 0 出发,按顺序 到达每一栋房子。但它们 不是必须 到达所有的房子。

任何时刻只有 一辆 垃圾车处在使用状态。当一辆垃圾车在行驶或者收拾垃圾的时候,另外两辆车 不能 做任何事情。

请你返回收拾完所有垃圾需要花费的 最少 总分钟数。

2、接口描述

python3
复制代码
​
python 复制代码
class Solution:
    def garbageCollection(self, garbage: List[str], travel: List[int]) -> int:
cpp
复制代码
​
cpp 复制代码
class Solution {
public:
    int garbageCollection(vector<string>& garbage, vector<int>& travel) {
        
    }
};

3、原题链接

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


二、解题报告

1、思路分析

花费来自于:捡取所有垃圾 和 每个车所需的移动距离

就是一个模拟题,遍历garbage,如果某个垃圾种类出现,对应的垃圾车的移动距离更新下

2、复杂度

时间复杂度: O(n)空间复杂度:O(1)

3、代码详解

python3
复制代码
​
python 复制代码
class Solution:
    def garbageCollection(self, garbage: List[str], travel: List[int]) -> int:
        c1, c2, c3 = 0, 0, 0
        s = 0
        pre = 0
        travel = [0] + travel
        for i, x in enumerate(garbage):
            s += len(x)
            pre += travel[i]
            if 'M' in x:
                c1 = pre
            if 'P' in x:
                c2 = pre
            if 'G' in x:
                c3 = pre

        return c1 + c2 + c3 + s
cpp
复制代码
​
cpp 复制代码
class Solution {
public:
    int garbageCollection(vector<string>& garbage, vector<int>& travel) {
        int c1 = 0, c2 = 0, c3 = 0, s = 0;
        for (int i = 0, pre = 0, n = garbage.size(); i < n; i ++) {
            s += garbage[i].size();
            pre += i ? travel[i - 1] : 0;
            if(~garbage[i].find('M'))
                c1 = pre;
            if(~garbage[i].find('P'))
                c2 = pre;
            if(~garbage[i].find('G'))
                c3 = pre;
        }
        return s + c1 + c2 + c3;
    }
};
相关推荐
ZhengEnCi1 小时前
GPT-6 Astra 爆改 Qwen 权重真有那么神吗:权重空间编程 0.016% 参数的真相
算法·架构
罗西的思考1 小时前
【轻量化复刻大模型 / KIMI K3】KDA(Kimi Delta Attention):并行
人工智能·算法·机器学习
夜不会漫长4 小时前
C++:红黑树
数据结构·算法
AI备案指南-满满4 小时前
算法备案审核不通过,一般是什么原因?
java·人工智能·算法·大模型备案·算法备案·大模型登记
Ramble_Naylor4 小时前
Rust深度解读:Send 与 Sync 的本质与线程安全边界
python·算法·rust
秋天的怀念_David4 小时前
算法一千零一夜 · 第二十三夜 电力民生写成的曲线
java·程序人生·算法
不一样的故事1265 小时前
NB/T 47013.8-2015 附录D 吸枪技术
人工智能·经验分享·算法
通问AI5 小时前
用 200 行 Python 给文档库做「上下文完整度」自检:四个可复算的检查项
算法
揽星河..5 小时前
【C语言】扫雷游戏
c语言·算法·游戏
丘山录5 小时前
本地部署 LongCat-2.5,要 7 台机器我只有 4 台
人工智能·算法