class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int curSum = 0;
//走完一圈之后还剩下多少
int remain = 0;
//开始的地方
int start = 0;
for (int i = 0; i < gas.size(); i++) {
int cha = gas[i] - cost[i];
curSum += cha;
remain += cha;
if (curSum < 0) {
start = i+1; //选择新的起始点
curSum = 0;//curSum清空
}
}
//当油量 < 消耗时, 没有足够汽油走完全程
if (remain < 0) return -1;
return start;
}
};
class Solution {
public:
int candy(vector<int>& ratings) {
int n = ratings.size();
int total = 0;
vector<int> candyVec(n, 1);
//从下标为1开始判断, 从左往右
for (int i = 1; i < n; i++) {
if (ratings[i] > ratings[i-1]) candyVec[i] = candyVec[i-1] + 1;
}
//从右往左
for (int i = n-2; i >= 0; i--) {
if (ratings[i] > ratings[i+1]) candyVec[i] = max(candyVec[i], candyVec[i+1]+1);
}
//总和所需要的糖果数
for (int it: candyVec) {
total += it;
}
return total;
}
};