leetcode-134 加油站绕一圈

测试:gas=1,2,3,4,5 cost=3,4,5,1,2

           gas=3,4,2  cost=3,4,3

int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
	int size=gas.size();
	int *Save=new int[size];
	for(int i=0;i<size;i++){
		Save[i]=gas[i]-cost[i];
	}
	for(int i=0;i<size;i++){
		if(Save[i]>=0){
			int j=i+1;
			int circle_j=j%size;//注意是循环操作
			int sum=Save[i]+Save[circle_j];
			while(sum>=0){
				circle_j=(circle_j+1)%size;
				sum+=Save[circle_j];
				if(i==circle_j){
					return i;
				}
			}
		}
	}
	return -1;
 }

别人的版本:(不知道为啥)

 int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        int lowest = INT_MAX, n=gas.size(), tank=0, index;
        for(int i=0;i<n;i++){
            tank=tank+gas[i]-cost[i];
            if(tank<lowest){
                lowest=tank;
                index=i+1;
            }
        }
        return (tank<0)?-1:(index%n);
    }

猜你喜欢

转载自blog.csdn.net/qq_36381573/article/details/83017446