1.分糖果问题
class Solution:
def candy(self , arr: List[int]) -> int:
# write code here
n=len(arr)
ans=[1]*n
for i in range(n-1):
if arr[i+1]>arr[i]:
ans[i+1]=ans[i]+1
for i in range(n-1,0,-1):
if arr[i-1]>arr[i] and ans[i-1]<=ans[i]:
ans[i-1]=ans[i]+1
return sum(ans)
2.主持人调度(一)
这道题不是贪心算法,是一道别的,这里就是要找重复的地方,重复了就直接false就可以了,为了好做,就可以按开始时间从小到大排序,然后找一下当前开始时间在别的时间范围之内的就可以了。
class Solution:
def hostschedule(self , schedule: List[List[int]]) -> bool:
# write code here
schedule = sorted(schedule, key = lambda x : x[0], reverse = False)
for i in range(1, len(schedule)):
if schedule[i][0] < schedule[i -1][1]:# 当前的开始时间在其他的结束时间之内
return False
return True
3.主持人调度(二)
没咋看懂,但是就是单独获取了开始和结束时间,然后对n个活动一一遍历,如果开始时间大于现在的结束时间,就可以往后移一下结束时间,如果不满足的话,就需要增加一个主持人。
这个题判断相交的方法比较奇怪,但是有点类似之前的一个逆序对的思想。
class Solution:
def minmumNumberOfHost(self , n: int, startEnd: List[List[int]]) -> int:
# write code here
start = [i[0] for i in startEnd]
end = [i[1] for i in startEnd]
start.sort()
end.sort()
num, end_time = 0, 0
for i in range(n):
if start[i]>=end[end_time]:
end_time+=1
else:
num+=1
return num
4.合并区间(类似有一天考试的题,找最小不交叉区间)
class Solution:
def merge(self , intervals: List[Interval]) -> List[Interval]:
# write code here
if not intervals:
return []
intervals.sort(key = lambda x :x.start)
res = [intervals[0]]
for i in intervals[1:]:
if i.start > res[-1].end:
res.append(i)
elif i.end >= res[-1].end:
res[-1].end = i.end
return res
5.
6.
7.
8.
9.
1.
1.
1.
1.
1.
1.