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;

}

}

```

相关推荐
OxYGC9 分钟前
Spring 面经系列 · 第 6 篇:Spring MVC 请求全流程、父子容器与零配置原理
java·spring·mvc
code2cat12 分钟前
Java高级篇之JDBC:连接数据库,完成查询、更新与事务
java·开发语言·数据库
bksczm17 分钟前
Redis数据结构之string
java·redis·mybatis
hzxxxz19 分钟前
PHP引擎两个高危漏洞复盘:计数顺序与旧地址缺陷的机理与处置清单
开发语言·php
cc_瀚海知行20 分钟前
资料检索 1|直接放入全文、按需读文件和先检索,有什么区别?
java·人工智能·ai
马立杰21 分钟前
PHP 未授权 RCE 应急响应:CVE-2026-109618 CVE-2026-109619 排查与加固实战
android·开发语言·php
布莱克60539 分钟前
C++ 内存泄漏全解析:常见场景、成因与规避实践
开发语言·c++·内存泄露
BioRunYiXue40 分钟前
使用docker分析高通量测序数据
java·数据库·人工智能·spring cloud·docker·tomcat·html
jimy11 小时前
lvalue、xvalue、prvalue(一):三者的分类
开发语言·c++
老王IT1 小时前
C#语言基础语法介绍
开发语言·c#