leetcode 135 分糖果
public static int candy(int[] ratings){
int result=0;
if(ratings.length==1) return 1;
int[] objects = new int[ratings.length];
objects[0]=1;
// 如果一次兼顾两边很难做到
//从左到右
for(int i=1;i<ratings.length;i++){
int pre=0;
pre= objects[i-1];
if(ratings[i]>ratings[i-1]) { //贪心一次,只要右大于左就行,计算结果
objects[i]=pre+1;
}else{
objects[i]=1;
}
}
// 从右到左
int next=0;
int cur=0;
for(int i=ratings.length-2;i>=0;i--){
if(ratings[i]>ratings[i+1]){
next =objects[i+1];
cur = objects[i];
cur= Math.max(cur,next+1);//贪心 左大于右 ,再次计算
objects[i]=cur;
}
}
for(int i:objects){
result= result+i;
}
return result;
}
leetcode 134 加油站
public static int canCompleteCircut(int[] gas,int[] cost){
int result=0;
int curSum=0;
int len = gas.length;
int index=0;
for(int i=0;i<len;i++) {
result = result + gas[i] - cost[i];
curSum = curSum + gas[i] - cost[i];
if (curSum < 0) { //这里贪心了, 只要从o-i 累加和小于0,其实位置至少要是i+1
// 其实本体给的大前提是 一定有唯一解
curSum = 0;
index = i + 1;
}
}
if(result<0) return -1;
return index;
}
leetcode 1005 K次取反求最大的和值
其实排序,成功了一半了