455.分发饼干
1、代码(AC)
class Solution {
public int findContentChildren(int[] g, int[] s) {
Arrays.sort(g);
Arrays.sort(s);
int gLeft = 0;
int sLeft = 0;
int sum = 0;
int length = g.length;
while(length > 0){
if(gLeft == g.length || sLeft == s.length){
break;
}
if(s[sLeft] >= g[gLeft]){
sum++;
sLeft++;
gLeft++;
length--;
}else{
sLeft++;
}
}
return sum;
}
}
2、分析
(1)本题我们采取的思路是按从小到大的顺序逐个喂饱从小到大的胃口。
(2)代码因为在判断的时候需要防止数组越界,所以可以直接采用for循环遍历我们考虑的因素。
376. 摆动序列
1、代码
class Solution {
public int wiggleMaxLength(int[] nums) {
if(nums.length <= 1){
return nums.length;
}
int preDiff = 0;
//第一个元素归为峰值
int curDiff = 0;
int count = 1;
for(int i=0; i<nums.length - 1; i++){
curDiff = nums[i + 1] - nums[i];
if(preDiff <= 0 && curDiff > 0 || preDiff >= 0 && curDiff < 0){
//重复元素(选取最后一个)
count++;
preDiff = curDiff;
//全上坡
}
}
return count;
}
}
2、分析
53. 最大子序和
1、代码
class Solution {
public int maxSubArray(int[] nums) {
int sum = 0;
int max = Integer.MIN_VALUE;
for(int i = 0; i < nums.length; i++){
sum += nums[i];
max = Math.max(sum,max);
//贪心,将负数去掉。
if(sum < 0){
sum = 0;
}
}
return max;
}
}