题目 <https://leetcode-cn.com/problems/gas-station/>
双指针,计算区域[i ~ j]之间的gas-cost,小于0,则i=j+1,重新计算新区域
一开始理解错了,以为0消耗不行。。。
int canCompleteCircuit(int* gas, int gasSize, int* cost, int costSize){
int *nums = malloc(sizeof(int) * gasSize);
int sum = 0,i,j;
for(i=0;i<gasSize;i++){
nums[i] = gas[i] - cost[i];
sum += nums[i];
//printf("%d, ",nums[i]);
}
//printf("\n");
if(sum < 0){
free(nums);
return -1;
}
/*//原来的写法,一样通过
int count=0;
for(i=0,j=0,sum=0;count<gasSize*2 && ((j+1)%gasSize) != i;j=(j+1)%gasSize,count++){
sum += nums[j];
if(sum <0 ){
sum = 0;
i = (j+1)%gasSize;
}
}
if(((j+1)%gasSize) == i)
return i;
else
return -1;
*/
for(i=0,j=0,sum=0;j < gasSize;j++){
sum += nums[j];
if(sum <0 ){
sum = 0;
i = j+1;
}
}
return i;
}