算法day23-贪心(1)
目录
- 分发饼干
- 摆动序列
- 最大子序和
二、分发饼干
https://leetcode.cn/problems/assign-cookies/?envType=problem-list-v2&envId=8At1GmaZ

class Solution { public int findContentChildren(int[] g, int[] s) { Arrays.sort(g); Arrays.sort(s); if(s.length == 0 || (s[s.length-1] < g[0])){ //若最大数量的饼干比胃口最小的 return 0; } int i = 0; //孩子的索引 for(int x : s){ if(i < g.length && g[i] <= x){ i++; } } return i; } }
三、摆动序列
https://leetcode.cn/problems/wiggle-subsequence/?envType=problem-list-v2&envId=8At1GmaZ

class Solution { public int wiggleMaxLength(int[] nums) { if (nums.length < 2) return nums.length; int preDiff = nums[1] - nums[0]; //若第二个元素与第一个元素的差值不为0,则结果为2 int count = preDiff != 0 ? 2 : 1; for (int i = 2; i < nums.length; i++) { int diff = nums[i] - nums[i - 1]; if ((preDiff <= 0 && diff > 0) || (preDiff >= 0 && diff < 0)) { //为了不漏掉第一个有效的波动趋势 count++; preDiff = diff; // 更新上一个差值 } } return count; } }
四、最大子序和
https://leetcode.cn/problems/maximum-subarray/description/?envType=problem-list-v2&envId=8At1GmaZ

class Solution { public int maxSubArray(int[] nums) { int minPrefix = 0; int maxSubSum = Integer.MIN_VALUE; int prefix = 0; for (int num : nums) { prefix += num; //求当前的前缀和 // 用当前最大的前缀和 - 前面最小的前缀和 maxSubSum = Math.max(maxSubSum, prefix - minPrefix); minPrefix = Math.min(minPrefix, prefix); } return maxSubSum; } }
浙公网安备 33010602011771号