理论基础
记得贪心没有规律即可!解不出来就看题解。
455. 分发饼干
先把学生和饼干都排序(Arrays.sort只能升序),然后都从后往前遍历,把最大的饼干给需求最大的孩子(贪心)
class Solution {public int findContentChildren(int[] g, int[] s) {Arrays.sort(g);Arrays.sort(s);int end = s.length - 1;int count = 0;for (int i = g.length - 1; i >= 0; i--) {if(end >= 0 && g[i] <= s[end]){count++;end--;}}return count;}
}
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的情况表示初始时的preDiffif ((curDiff > 0 && preDiff <= 0) || (curDiff < 0 && preDiff >= 0)) {count++;preDiff = curDiff;}}return count;}
}
- #### 情况二:数组首尾两端
- #### 情况三:单调坡度有平坡
class Solution {public int maxSubArray(int[] nums) {int sum = 0;int maxSum = Integer.MIN_VALUE;for(int i = 0; i < nums.length; i++){if(sum < 0){sum = 0;}sum += nums[i];maxSum = maxSum = Integer.max(sum , maxSum);}return maxSum;}}
//贪心:先累加,当前和为负数时放弃,统计最大。