咱们先来看复杂度分析:开yun体育网
期间复杂度:O(n*2) , 其中n是数组stations的长度。动态探究的现象数是 O(n) ,每个现象需要 O(n) 的期间联想,因此期间复杂度是 O(n*2);
空间复杂度:O(n) ,其中n是数组stations的长度。需要创建长度为n+1的数组dp。
念念路和算法
用 n 暗示数组 stations 的长度,即加油站的个数。行驶的经由中按次到达 n+1 个位置,区分是 n 个加油站和标的地。为越过到最少加油次数,应该在确保每个位置王人能到达的前提下,选拔最大加油量的加油站加油。
为越过到照旧到达过的加油站中的最大加油量,需要使用优先队伍记载统统照旧到达过的加油站的加油量,优先队伍中的最大元素位于队首,即每次从优先队伍中取出的元素王人是优先队伍中的最大元素。
从左到右遍历数组 stations ,关于每个加油站,率先判断该位置是否不错达到,然后将刻下加油站的加油量添加到优先队伍中。关于标的地,则只需要判断是否不错达到。
具体作念法如下:
1.联想刻下位置(加油站或标的地)与上一个位置的距离之差,左证该距离之差赢得从上一个位置行驶到刻下位置需要使用的汽油量,将使用的汽油量从剩余的汽油量中减去。
2.要是剩余的汽油量小于 0 ,则暗示在不加油的情况下无法从上一个位置行驶到刻下位置,需要加油。取出优先队伍中的最大元素加到剩余的汽油量,并将加油次数加 1,近似该操作直到剩余的汽油量大于即是 0 或优先队伍变为空。
3.要是优先队伍变为空时,剩余的汽油量仍小于 0 ,则暗示在统统经过的加油站加油之后仍然无法到达刻下位置,复返 −1 。
4.要是刻下位置是加油站,则将刻下加油站的加油量添加到优先队伍中,并使用刻下位置更新上一个位置。
要是无法到达标的地,则在遍历经由中复返 −1 。要是遍历戒指仍未复返 −1 ,则不错到达标的地,复返加油次数。
代码
Python3
Java
好了开yun体育网,今天的著作共享就到这里了,但愿对公共的学习有匡助哦!