算法:加油站良好的出发点

N个加油站逆时针组成一个环,每个加油站最多加oil[i]的油量,该加油站距下个加油站距离dis[i],1个油可以走1个距离,初始车里没有油,则从哪些加油站出发可以逆时针一圈后回到出发点。

类似dp的思维题,时间O(N)

该方法实现O(N)的核心思想在于,先找到一个良好出发点,再顺时针找可以到达该良好出发点的出发点,即新良好出发点,依次顺时针找,若顺时针一圈后仍然没有良好出发点,则所有点都不会是。

过程如下:

首先 ,数组实现环结构,每个元素代表加油站,Arr[i] 取值为 oil[i] - dis[i] ,其中,oil[i] 为当前加油站提供的油,dis[i] 为从加油站 i 到 加油站 i+1 的距离,其中 i+1 可以返回到数组0位置。Arr[i] 新值可以称为净值。

由于车走的方向是逆时针,所以思维处理该题,逆时针扩充联通块,顺时针考查起始位置。

首先,所有净值小于0的加油站一定不满足要求。

所以,先从考查任意净值大于等于0的起始点,然后逆时针扩充联通块。

若能逆时针扩充一圈后回来,则该点是良好出发点,否则不是,同时标记联通块计算的结尾点。

然后从考查点顺时针考查下个不为0的点,是否可以扩充到刚才的考查点,不可以则一定不是良好出发点,若可以,再考查是否可以从刚才结尾点继续扩充一圈,依次类推。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值