455.分发饼干
class Solution {
//小饼干先分给胃口小的人
public int findContentChildren(int[] g, int[] s) {
Arrays.sort(g);
Arrays.sort(s);
int count=0;
int start=0;
for(int i=0; i<s.length && start < g.length;i++){
if(s[i]>=g[start]){
count++;
start++;
}
}
return count;
}
}
376. 摆动序列
class Solution {
public int wiggleMaxLength(int[] nums) {
int pre =0;
int cur=0;
//count=1和for的上界为nums长度-1是默认最后一个元素作为一次摆动
int count=1;
for(int i=0;i<nums.length-1;i++){
cur=nums[i+1]-nums[i];
if((pre>=0 && cur<0) || (pre<=0 && cur>0)){
count++;
//pre改动放在if内,即在平坡情况pre跳过更新
pre=cur;
}
}
return count;
}
}
53. 最大子序和
局部最优:当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小。
全局最优:选取最大“连续和”
class Solution {
public int maxSubArray(int[] nums) {
int i = 0;
int sum = 0;
int max = Integer.MIN_VALUE;
while(i<nums.length){
sum+=nums[i];
if(sum>max)max=sum;// 取区间累计的最大值
i+=1;
if(sum<0)sum=0;//当前连续和为负数时放弃前面的数重新开始统计连续和。
}
return max;
}
}