首页 > 其他 > 详细

leetcode1094

时间:2019-06-23 13:39:58      阅读:114      评论:0      收藏:0      [点我收藏+]
 1 class Solution:
 2     def carPooling(self, trips: List[List[int]], capacity: int) -> bool:
 3         n = len(trips)
 4         if n == 0:
 5             return True
 6         elif n == 1:
 7             return True if trips[0][0] <= capacity else False
 8 
 9         trips = sorted(trips,key=lambda x:[x[1],x[2]])
10         #print(trips)
11 
12         cursum = trips[0][0]
13         begin = trips[0][1]
14         end = trips[0][2]
15         l = [0]
16         for i in range(1,n):
17             if end > trips[i][1]:
18                 cursum += trips[i][0]
19                 begin = max(begin,trips[i][1])
20                 end = min(end,trips[i][2])
21                 l.append(i)
22             else:
23                 begin = max(begin,trips[i][1])
24                 end = min(end,trips[i][2])
25                 j = 0
26                 while len(l) > 0 and j < len(l):
27                     pre = trips[l[j]]
28                     if pre[2] <= begin:
29                         cursum -= pre[0]
30                         l.pop(j)
31                     else:
32                         j += 1
33                 cursum += trips[i][0]
34                 l.append(i)
35                 minend = 1001
36                 for k in range(len(l)):
37                     if minend > trips[l[k]][2]:
38                         minend = trips[l[k]][2]
39                 end = minend
40 
41             if cursum > capacity:
42                 return False
43         return True

基本思路:计算有相交区域的乘客的数量和,如果超过容量则返回false。

这样的代码怎么看都不是最优的,执行时间也并不让人满意。

技术分享图片

 

下面给出讨论区中高手的代码,无论是代码的可读性和执行效率都很好。

参考地址:https://leetcode.com/problems/car-pooling/discuss/317712/Simple-Python-solution-(Meeting-Rooms-II)

 1 class Solution:
 2     def carPooling(self, trips: List[List[int]], capacity: int) -> bool:
 3         lst = []
 4         for n, start, end in trips:
 5             lst.append((start, n))
 6             lst.append((end, -n))
 7         lst.sort()
 8         pas = 0
 9         for loc in lst:
10             pas += loc[1]
11             if pas > capacity:
12                 return False
13         return True

技术分享图片

总结一下吧,做1093题时,看了一个多小时才明白题意,做完那道题目,就有点迷糊了。

做这道题时,之前没有做过leetcode 253 Meeting Room II,所以没有已有的“模版”可以直接套用。

没有算法思想的支撑,不能把问题转化为简化的模型,就只从题意本身硬编码解决了。

能硬解出来,也行!

leetcode1094

原文:https://www.cnblogs.com/asenyang/p/11072432.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!