已知一条公路上,有一个起点和一个终点,这之间有n个加油站。
已知:从这n个加油站到终点的距离d与各个加油站可以加油的量L,
起点位置至终点的距离L与起始时刻油箱的油量P。假设1个单位的汽油走1个单位的距离,
油箱没有上限,最少加几次油,可以从起点开至终点?(无法到达返回-1)
思考:
汽车经过每个加油站,到底该不该加油,如果所有的都遍历,就是2**n次方,肯定不行。
那么联想到跳跃问题,我们尽可能的晚跳,然后选择最大油量的那个,来加油。
问题的出口:
1.如果加油量+此刻指针的位置坐标 >= 最远 则返回res
2.创建一个最大堆来保存路过的每个加油站的油量,remove 此个加油站,然后需要加的时候,加最大的那个
每加一次 res+=1。当最大堆为0且指针位置,加剩余油量 < 最远 return -1
def jiayou(length,gas,nums):
'''
length:起点到终点的距离
gas:刚开始的油量
nums:[(10,2),(14,5),(15,3),(21,4)] 第一个为距离起点的坐标,第二个为可以加的油量
'''
dui = []
res = 0
for i in range(length):
#每走一步,消耗一个油
gas -= 1
if nums == [] and i + gas >= length:
return res
elif nums == [] and i + gas < length:
return -1
else:
if i == nums[0][0]:
dui.append(nums[0][0])
dui.sort(reverse=True)
nums.remove(nums[0][0])
if gas == 0:
gas += dui[0]
dui.remove(dui[0])
res += 1
return res