代码随想录刷题随记27-贪心
455.分发饼干
leetcode链接
class Solution {
public int findContentChildren(int[] g, int[] s) {
//boolean used[]=new boolean [s.length];
Arrays.sort(s);
Arrays.sort(g);
int index=0;
int ret=0;
for(int i=0;i<g.length;i++){
while(index<s.length&&g[i]>s[index]){
index++;
}
if(index>=s.length)
return ret;
ret++;
index++;
}
return ret;
}
}
376. 摆动序列
leetcode链接
贪心:
去除所有坡上的点
class Solution {
public int wiggleMaxLength(int[] nums) {
int length=0;
int curdif=0;
int predif=0;
int next;
if(nums.length<1)
return nums.length;
for(int i=1;i<nums.length;i++){
curdif=nums[i]-nums[i-1];
if(curdif!=0&&(curdif*predif<0||predif==0)){
length++;
predif=curdif;
}
}
return length+1;
}
}
53. 最大子序和
leetcode链接
贪心:
局部最优:当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小。
全局最优:选取最大“连续和”
class
Solution {
public int maxSubArray(int[] nums) {
int count=Integer.MIN_VALUE;
int cur=0;
int cursum=0;
for(int i=0;i<nums.length;i++){
cursum+=nums[i];
count=Math.max(cursum, count);
if(cursum<0){
cursum=0;
}
}
return count;
}
}