134. Gas Station
by Botao Xiao
Thinking:
- Method1:慢
- 关于入口要找到gas大于cost。
class Solution {
public int canCompleteCircuit(int[] gas, int[] cost) {
int len = gas.length;
for(int i = 0; i < len; i++){
if(cost[i] <= gas[i]){
if(valid(gas, cost, i))
return i;
}
}
return -1;
}
private static boolean valid(int[] gas, int[] cost, int start){
int remain = 0;
int temp = start;
for(; start < gas.length; start++){
remain += (gas[start] - cost[start]);
if(remain < 0) return false;
}
for(start = 0; start < temp; start++){
remain += (gas[start] - cost[start]);
if(remain < 0) return false;
}
return true;
}
}
- Method2:
class Solution {
public int canCompleteCircuit(int[] gas, int[] cost) {
int len = gas.length;
int sum = 0;
int total = 0;
int index = 0;
for(int i = 0; i < len; i++){
sum += gas[i] - cost[i];
if(sum < 0){
total += sum;
sum = 0;
index = i+1;
}
}
total += sum;
return (total >= 0) ? index : -1;
}
}
二刷
class Solution {
public int canCompleteCircuit(int[] gas, int[] cost) {
int len = gas.length;
int sum = 0;
int index = 0; // 可能成功的index的值。
int total = 0; // 用于记录所有gas和cost的差值。
for(int i = 0; i < len; i++){
sum += gas[i] - cost[i]; // 在某一个结点,获得当前的正负均值。
if(sum < 0){
//如果当前的正负均值小于0,则说明当前的结点不可能成为开始的结点。
// 将当前的正负计数值清零。并移动到下一个结点。
total += sum;
sum = 0;
index = i + 1;
}
}
total += sum;
return total < 0 ? -1: index; // 如果差值为负数,则说明不可能成功,则返回-1
}
}
Subscribe via RSS