今日收获:加油站,分发糖果,柠檬水找零,根据身高重建队列
1. 加油站
题目链接:134. - 力扣(LeetCode)
思路:
(1)局部最优是剩余油量和要大于0,否则选下一个节点作为起始节点
(2)记录当前剩余油量和总的剩余油量,如果当前剩余油量小于0,选择下一个节点作为起点。思路有点像最大子序和;如果总的剩余油量小于0,说明无解
方法:
class Solution {
public int canCompleteCircuit(int[] gas, int[] cost) {
int len=gas.length;
int totalSum=0;
int curSum=0;
int start=0;
for (int i=0;i<len;i++){
curSum+=gas[i]-cost[i];
totalSum+=gas[i]-cost[i];
if (curSum<0){ // 选择下一个节点开始
start=i+1;
curSum=0;
}
}
if (totalSum&