134. 加油站 Gas Station

题目 <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;
}

猜你喜欢

转载自blog.csdn.net/ZRXSLYG/article/details/112754869