思路:
今天开始了贪心的题目,贪心的题目要么比较简单,要么就很难,找不到头绪,今天的题目还是相对简单一些的。第三题中最难想的一个点就是,如果sum<0,则将sum置为0,而不是如果nums[i]<0就从头开始,因为只要连续和还是正数就会 对后面的元素 起到增大总和的作用。 所以只要连续和为正数我们就保留。并且4 + -1 之后也不会错过 4 成为最大连续和的可能性,因为有res在记录最大值。
455.分发饼干
class Solution {
public int findContentChildren(int[] g, int[] s) {
if(g.length==0 || s.length==0) return 0;
Arrays.sort(g);
Arrays.sort(s);
int res=0;
int cookie=s.length-1;
for(int i=g.length-1;i>=0;i--){
if(cookie>=0 && s[cookie]>=g[i]){
res++;
cookie--;
}
}
return res;
}
}
376. 摆动序列
class Solution {
public int wiggleMaxLength(int[] nums) {
if (nums.length <= 1) {
return nums.length;
}
//当前差值
int curDiff = 0;
//上一个差值
int preDiff = 0;
int count = 1;
for (int i = 1; i < nums.length; i++) {
//得到当前差值
curDiff = nums[i] - nums[i - 1];
//如果当前差值和上一个差值为一正一负
//等于0的情况表示初始时的preDiff
if ((curDiff > 0 && preDiff <= 0) || (curDiff < 0 && preDiff >= 0)) {
count++;
preDiff = curDiff;
}
}
return count;
}
}
53. 最大子序和
class Solution {
public int maxSubArray(int[] nums) {
int res=Integer.MIN_VALUE;
int sum=0;
for(int i=0;i<nums.length;i++){
sum+=nums[i];
if(sum>res){
res = sum;
}
if(sum<0){
sum=0;
}
}
return res;
}
}