455.分发饼干
代码随想录
class Solution {
public int findContentChildren(int[] g, int[] s) {
int ans = 0;
Arrays.sort(g);
Arrays.sort(s);
int start = s.length - 1;
for (int i = g.length - 1; i >=0; i--) {
if (start >= 0 && s[start] >= g[i]) {
ans++;
start--;
}
}
return ans;
}
}
376. 摆动序列
代码随想录
情况一:上下坡中有平坡
情况二:数组首尾两端
情况三:单调坡中有平坡
class Solution {
public int wiggleMaxLength(int[] nums) {
int ans = 1;
int preDiff = 0, curDiff = 0;
for (int i = 0; i < nums.length - 1; i++) {
curDiff = nums[i + 1] - nums[i];
if ((curDiff > 0 && preDiff <= 0) || (curDiff < 0 && preDiff >= 0)) {
ans++;
preDiff = curDiff;
}
}
return ans;
}
}
53. 最大子序和
代码随想录
局部最优:当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一
class Solution {
public int maxSubArray(int[] nums) {
int sum = 0;
int ans = Integer.MIN_VALUE;
for (int i = 0; i < nums.length; i++) {
sum += nums[i];
if (sum > ans) {
ans = sum;
}
if (sum < 0) {
sum = 0;
}
}
return ans;
}
}
个元素 “连续和”只会越来越小。