

题目不难,中等+评级3,不考察算法和数据结构,但是考察很多细节和思路。
自己踩的坑
自己一开始写的代码,没有注意到“垃圾车不用遍历所有的房子”,也就是说如果后面的房子都不在有某种垃圾了,则不用向后遍历了。
自己一开始是将后面所有的字符串相加,然后查找,结果超时了。
后面自己改正了思路,在开垃圾车前(?),先对字符串数据进行遍历。找到每种垃圾最后出现的位置,后面的房子就不用便利了。
代码如下:
class Solution:
def garbageCollection(self, garbage: List[str], travel: List[int]) -> int:
ans = 0
str_g = 'PGM'
n = len(garbage)
for g in str_g:
least = 0
for i in range(n):
if garbage[i].find(g) != -1:
least = i
for i in range(0,least+1):
now = garbage[i].find(g)
while now != -1:
ans += 1
# print('在',i,'收拾垃圾',g,',总耗时',ans)
garbage[i] = garbage[i][:now]+garbage[i][now+1:]
now = garbage[i].find(g)
if i != n-1 and i<least:
ans += travel[i]
# print('从',i,'去',i+1,'总耗时',ans)
return ans大佬的思路一:多次遍历
看了灵山大佬的思路,只能说真的巧妙:

先让垃圾车跑满全程,再倒着遍历garbage,减去多跑的时间。
class Solution:
def garbageCollection(self, garbage: List[str], travel: List[int]) -> int:
ans = sum(map(len, garbage)) + sum(travel)*3
for c in 'MPG':
for g, t in zip(reversed(garbage), reversed(travel)):
if c in g:
break
ans -= t
return ans几个学习到的技巧:
map函数的用法:接受2个参数,第一项是函数,第二项是可迭代对象(如列表)。返回一个迭代器,包含每个元素应用函数后的结果。例如:def double(i): return 2*i l = [1,2,3,4,5] res = map(double, l) for i in res: print(i) #打印:2 4 6 8 10作者这里通过
map(len,garbage),获得了garbage每个字符串的长度,然后通过sum()函数累加,得到了所有字符串的总长度。- 倒序遍历列表,可以直接使用
reverse(garbage),不用傻乎乎的通过range(n-1,-1,-1)来遍历下标。 - 老生常谈的用
zip()来同时遍历2个列表,自己老是记不住 判断字符串是否包含某子字符串,直接用
in就好了。a = 'abcd' print('a' in a) # 打印: True print('aaa' in a) # 打印: False


KTV唱歌摸摸唱妹子一般多少钱a0heb.cn
华纳圣淘沙公司开户新手教程零基础学会(183-8890-9465薇-STS5099)
华纳圣淘沙公司开户华纳圣淘沙公司开户保姆级教程(183-8890-9465薇-STS5099)一步步教你开通华纳圣淘沙公司账户(183-8890-9465薇-STS5099)华纳圣淘沙公司开户分步图解首次开户必看:(183-8890-9465薇-STS5099)
华纳圣淘沙全攻略华纳圣淘沙公司开户实操手册(183-8890-9465薇-STS5099)
华纳圣淘沙开户流程视频教程手把手教学:(183-8890-9465薇-STS5099)
华纳圣淘沙公司开户华纳圣淘沙公司开户完全指南(183-8890-9465薇-STS5099)
华纳东方明珠客服电话是多少?(??155--8729--1507?《?薇-STS5099】【?扣6011643?】
华纳东方明珠开户专线联系方式?(??155--8729--1507?《?薇-STS5099】【?扣6011643?】
《潜伏5:红门》恐怖片高清在线免费观看:https://www.jgz518.com/xingkong/36204.html
想想你的文章写的特别好www.jiwenlaw.com