理论基础
讲解链接:代码随想录-贪心算法理论基础
455.分发饼干
讲解链接:代码随想录-455.分发饼干
对胃口和饼干排序,然后遍历饼干,如果饼干大于等于胃口,就+1,否则饼干向后递增再判断。
public int findContentChildren(int[] g, int[] s) {
Arrays.sort(g);
Arrays.sort(s);
int count = 0;
for (int i = 0; i < s.length && count < g.length; i++) {
if (s[i] >= g[count]) {
count++;
}
}
return count;
}
376.摆动序列
讲解链接:代码随想录-376.摆动序列
需要注意几个点,下标从1开始,所以结果初始化为1,然后更新前一个差值,要放在条件中,不能每次都更新。出现平坡就会有问题的。
public int wiggleMaxLength(int[] nums) {
int result = 1;
int curDiff = 0;
int preDiff = 0;
for (int i = 1; i < nums.length; i++) {
curDiff = nums[i] - nums[i - 1];
if ((curDiff > 0 && preDiff <= 0) || (curDiff < 0 && preDiff >= 0)) {
result++;
preDiff = curDiff;
}
}
return result;
}
53.最大子序和
讲解链接: 代码随想录-53.最大子序和
这里有个思路,就是如果如果前结果和小于0,就直接归0,抛弃前面的结果。大于0就保留下来,因为对于后面肯定是有益的。
public int maxSubArray(int[] nums) {
int result = Integer.MIN_VALUE;
int sum = 0;
for (int i = 0; i < nums.length; i++) {
if (sum < 0) {
sum = 0;
}
sum += nums[i];
result = Math.max(sum, result);
}
return result;
}
总结
这题目不看一遍题解真做不出来。。