Leetcode 455.分发饼干
题目链接
思路:贪心算法,局部最优推出整体最优
代码:
class Solution {
public int findContentChildren(int[] g, int[] s) {
// 贪心算法:优先考虑胃口,先喂饱大胃口
Arrays.sort(g);
Arrays.sort(s);
int result = 0;
// 饼干的数组下标
int index = s.length - 1;
// 遍历胃口
for (int i = g.length - 1; i >= 0; i--) {
// 大饼干喂给胃口大的孩子
if (index >= 0 && s[index] >= g[i]) {
result++;
index--;
}
}
return result;
}
}
class Solution {
public int findContentChildren(int[] g, int[] s) {
// 贪心算法:小饼干先喂饱小胃口
Arrays.sort(g);
Arrays.sort(s);
// 孩子的数组下标
int index = 0;
for (int i = 0; i < s.length; i++) {
if (index < g.length && g[index] <= s[i]) {
index++;
}
}
return index;
}
}
Leetcode 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;
}
}
Leetcode 53. 最大子序和
题目链接
思路:贪心算法,不断重置最大子序起始位置
代码:
class Solution {
public int maxSubArray(int[] nums) {
// 贪心算法
if (nums.length == 1) {
return nums[0];
}
int sum = Integer.MIN_VALUE;
int count = 0;
for (int i = 0; i < nums.length; i++) {
count += nums[i];
// 取区间累计的最大值(相当于不断确定最大子序终止位置)
sum = Math.max(sum, count);
// 如果区间累计为负数了,重置最大子序起始位置
if (count <= 0) {
count = 0;
}
}
return sum;
}
}