題目:134. 加油站
思路:貪心,時間復雜度0(n)。
當前點i來到下一個點i+1,那么油的變化量是gas[i]-cost[i]。
先統計遍歷完所有點后,油的變化量sum。如果sum<0,說明不可能繞行一周;sum>0,說明可以,當sum在最低點id時,那么后續的gas[i]-cost[i]增量和>=0,即id+1為合法點。
C++版本:
class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int n=gas.size();// sum為油的變化量之和,mn為sum最小時的值int sum=0,mn=0;// id為mn時的下標int idx=0;for(int i=0;i<n;i++){sum+=gas[i]-cost[i];// 維護最小值if(sum<mn){mn=sum;idx=i+1;}}if(sum<0) return -1;return idx%n;}
};
JAVA版本:
class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {int n=gas.length;int sum=0,mn=0;int idx=0;for(int i=0;i<n;i++){sum+=gas[i]-cost[i];if(sum<mn){mn=sum;idx=i+1;}}if(sum<0) return -1;return idx%n;}
}
Go版本:
func canCompleteCircuit(gas []int, cost []int) int {n:=len(gas)sum,mn,id:=0,0,0for i:=0;i<n;i++ {sum+=gas[i]-cost[i]if sum<mn {mn=sum;id=i+1}}if sum<0 {return -1}return id
}