day27 贪心算法-基础+发饼干+摆动序列+最大子序和

8. Greedy

8.1 introduction

核心:通过局部最优达到全局最优。

8.2 455. Assign Cookies

Assume you are an awesome parent and want to give your children some cookies. But, you should give each child at most one cookie.

Each child i has a greed factor gi, which is the minimum size of a cookie that the child will be content with; and each cookie j has a size `sj. If sj >= gi, we can assign the cookie j to the child i, and the child i will be content. Your goal is to maximize the number of your content children and output the maximum number.

https://leetcode.cn/problems/assign-cookies/description/

https://programmercarl.com/0455.分发饼干.html

用大饼干满足大馋孩子/用小饼干满足小孩子

8.3 376. Wiggle Subsequence

A wiggle sequence is a sequence where the differences between successive numbers strictly alternate between positive and negative. The first difference (if one exists) may be either positive or negative. A sequence with one element and a sequence with two non-equal elements are trivially wiggle sequences.

For example, `1, 7, 4, 9, 2, 5 is a wiggle sequence because the differences (6, -3, 5, -7, 3) alternate between positive and negative.

In contrast, `1, 4, 7, 2, 5 and 1, 7, 4, 5, 5 are not wiggle sequences. The first is not because its first two differences are positive, and the second is not because its last difference is zero.

A subsequence is obtained by deleting some elements (possibly zero) from the original sequence, leaving the remaining elements in their original order.

Given an integer array nums, return the length of the longest wiggle subsequence of nums.

https://leetcode.cn/problems/wiggle-subsequence/

https://programmercarl.com/0376.摆动序列.html

删除单调坡上的元素。操作上遇到摆动就++即可。

特殊情况:

1.上下坡中有平坡

2.首尾元素:虚拟头节点+默认尾部有摆动。

3.单调坡中有平坡

```java

public class wiggleSubsequence {

public int wiggleMaxLength(int\[\] nums) {

if(nums.length <= 1)return nums.length;

int preDifference = 0;

int curDifference = 0;

//头节点算上,不遍历它

int result = 1;

for (int i = 1; i < nums.length; i++) {

curDifference = numsi - numsi-1;

if((preDifference >= 0 && curDifference < 0)||(preDifference <= 0 && curDifference > 0)){

result++;

preDifference = curDifference;

}

}

return result;

}

}

class wiggleSubsequenceTest {

public static void main(String\[\] args) {

int\[\] nums = {1,17,5,10,13,13,13,15,10,5,16,8};

wiggleSubsequence example = new wiggleSubsequence();

System.out.println(example.wiggleMaxLength(nums));

}

}

```

8.4 53. Maximum Subarray

Given an integer array nums, find the subarray with the largest sum, and return its sum.

https://leetcode.cn/problems/maximum-subarray/

https://programmercarl.com/0053.最大子序和.html

当连续和是负数的时候,就抛弃

要随时保存最大值。

```java

public class maxSubarray {

public int maxSubArray(int\[\] nums) {

int cur = 0;

int result = Integer.MIN_VALUE;

for (int i = 0; i < nums.length; i++) {

cur += numsi;

result = Math.max(cur,result);

if(cur < 0) cur = 0;

}

return result;

}

}

```

相关推荐
嘻哈∠※4 小时前
0061基于 SpringBoot 的投稿与稿件处理系统设计与实现
java·spring boot·后端
WWJA王文举4 小时前
I²C通信完整流程详解:START、地址、ACK、数据、Repeated START和STOP一次讲透
c语言·开发语言
zhanghaha13145 小时前
Python进阶教程:6_JSON 数据解析 —— 新手完全指南
开发语言·python·json
白狐_7985 小时前
408数据结构第8章:排序②——性质对比秒杀、场景选择与外部排序
java·数据结构·算法
zander2586 小时前
LeetCode 84:柱状图中的最大矩形——单调栈如何确定左右边界
java·数据结构·算法
码匠许师傅6 小时前
【C++ 面试真题】聊聊 C++ 的拷贝构造与拷贝赋值
java·c++·面试
qq_448011166 小时前
C语言中的动态内存分配
c语言·开发语言·php
汉字萌萌哒7 小时前
2024CSP-J入门级C++真题详解
开发语言·c++
arbboter7 小时前
【网络工具】NetProxy网络代理用户手册
开发语言·网络·c#·网络代理·网络异常·代理工具
极创信息7 小时前
系统安全隐患全方位排查方案:标准化渗透测试全流程
java·opencv·struts·数据挖掘·eclipse·语音识别·hibernate