今日任务
贪心算法理论基础
455.分发饼干
376. 摆动序列
53. 最大子序和
贪心算法理论基础
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。
455.分发饼干
题目链接: . - 力扣(LeetCode)
class Solution {
public int findContentChildren(int[] g, int[] s) {
Arrays.sort(g);
Arrays.sort(s);
int res = 0;
int right = 0;
for (int i = 0; i < g.length; i++) {
while (right < s.length) {
if (s[right] >= g[i]) {
res++;
right++;
break;
} else {
right++;
}
}
}
return res;
}
}
376. 摆动序列
题目链接: . - 力扣(LeetCode)
class Solution {
public int wiggleMaxLength(int[] nums) {
int[] diffArray = new int[nums.length - 1];
if (nums.length == 0 || nums.length == 1) {
return nums.length;
}
for (int i = 0; i < nums.length - 1; i++) {
diffArray[i] = nums[i + 1] - nums[i];
}
if (diffArray.length == 1 && diffArray[0] != 0) {return nums.length;}
if (diffArray.length == 1 && diffArray[0] == 0) {return nums.length - 1;}
int pre = diffArray[0];
int count = 0;
for (int i = 1; i < diffArray.length; i++) {
if (pre == 0) {
count++;
pre = diffArray[i];
continue;
}
if (pre * diffArray[i] < 0) {
pre = diffArray[i];
} else {
count++;
}
}
return pre == 0 ? nums.length - count - 1 : nums.length - count;
}
}
53. 最大子序和
题目链接: . - 力扣(LeetCode)
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(max,sum);
if (sum <= 0) {
sum = 0;
}
}
return max;
}
}