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 g[i], which is the minimum size of a cookie that the child will be content with; and each cookie j has a size `s[j]. If s[j] >= g[i], 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 = nums[i] - nums[i-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 += nums[i];

result = Math.max(cur,result);

if(cur < 0) cur = 0;

}

return result;

}

}

```

相关推荐
欧恩意1 天前
【Tools】Java反汇编工具推荐
java·汇编
geovindu1 天前
python: Memento Pattern
开发语言·python·设计模式·备忘录模式
学无止境_永不停歇1 天前
十、C++多态
开发语言·c++
寻星探路1 天前
【JVM 终极通关指南】万字长文从底层到实战全维度深度拆解 Java 虚拟机
java·开发语言·jvm·人工智能·python·算法·ai
lbb 小魔仙1 天前
【Java】Java 实战项目:手把手教你写一个电商订单系统
android·java·python
Aric_Jones1 天前
JavaScript 从入门到精通:完整语法指南
开发语言·javascript·ecmascript
星河耀银海1 天前
Java安全开发实战:从代码防护到架构安全
java·安全·架构
青云交1 天前
Java 大视界 -- 基于 Java 的大数据可视化在城市水资源管理与节水策略制定中的应用
java·java 大数据·java 大数据可视化·城市水资源管理·spark 数据清洗·echarts 热力图·管网漏损控制
岱宗夫up1 天前
FastAPI入门(上篇):快速构建高性能Python Web API
开发语言·前端·python·fastapi
Dxy12393102161 天前
中文乱码恢复方案
开发语言·python