理论基础
455.分发饼干
思路:从小饼干开始喂小胃口
java
class Solution {
public int findContentChildren(int[] g, int[] s) {
Arrays.sort(g);
Arrays.sort(s);
int start = 0;
int count = 0;
for (int i = 0; i < s.length && start < g.length; i++) {
if (s[i] >= g[start]) {
start++;
count++;
}
}
return count;
}
}
376. 摆动序列
思路:初始时preDiff可能为0
java
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;
}
}
53. 最大子序和
思路:在处理负数的情况下,对于任何负数,如果将其加入当前的和中,都会导致和变小。因此,如果当前的和已经为负数,那么加上任何负数都不会使和变大,因此应该将当前的 count 重置为0
java
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;
}
}