455.分发饼干
思路:
代码:
class Solution {
public int findContentChildren(int[] g, int[] s) {
if (s.length==0||g.length==0) {
return 0;
}
Arrays.sort(g);
Arrays.sort(s);
//s是饼干数,如果s的最小值能够满足g的最大值
int i = 0;
int j = 0;
//先找到能够开吃的位置
while (g[i]>s[j]&&j<s.length) {
j++;
}
int count=0;
while (j<s.length&&i<g.length) {
if (g[i]<=s[j]) {
count++;
i++;
}
j++;
}
return count;
}
}
376.摆动序列
思路:
画图解决问题,分析图比较合适
代码:
class Solution {
public int wiggleMaxLength(int[] nums) {
if (nums.length<=1) {
return nums.length;
}
int preDiff = 0;
int curDiff = 0;
int count = 1;
for (int i = 1; i < nums.length; i++) {
curDiff = nums[i] - nums[i-1];
//判断等于的情况是考虑到平坡的情况
if ((curDiff>0 && preDiff<=0) || (curDiff<0 && preDiff>=0)) {
preDiff = curDiff;
count++;
}
}
return count;
}
}
53.最大子序和
思路:
代码:
class Solution {
public int maxSubArray(int[] nums) {
int max = Integer.MIN_VALUE;
int sum = 0;
//连续和是负数的时候,直接跳过下一个,不用考虑之前的,应该之前的最大值已经被记录过了;
//因为如果i之前的连续和是负数,那么他只会让后面的数相加后越来越小
for (int i = 0; i < nums.length; i++) {
sum+=nums[i];
if (sum>max) max = sum;
if (sum<0) sum = 0;
}
return max;
}
}