代码随想录day24 | 贪心算法理论基础 leetcode 455.分发饼干 376.摆动序列 53. 最大子序和

news/2025/1/17 4:56:55/
算法>贪心算法理论基础

算法>贪心算法是一种在每一步选择中都做出当前看起来最优的选择,从而期望通过局部最优解得到全局最优解的算法算法>贪心算法的基本思想是:在解决问题时,尽量选择当前最好的选项,最终达到全局最优解.

分发饼干

题目:假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。

对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是满足尽可能多的孩子,并输出这个最大数值。

为了尽可能满足最多数量的孩子,从贪心的角度考虑,应该按照孩子的胃口从小到大的顺序依次满足每个孩子,且对于每个孩子,应该选择可以满足这个孩子的胃口且尺寸最小的饼干。

for循环不利于控制移动,舍弃这种普遍思维,习惯用变量的移动控制,学习数据处理的元素控制,区分识别动态,非动态,目标值,固定值。

public int findContentChildren(int[] g, int[] s) {Arrays.sort(g);Arrays.sort(s);int count = 0,index = s.length-1;for(int i = g.length-1;i>=0;i--){if(index>=0&&s[index]>=g[i]){index--;count++;}}return count;        }

摆动序列

以下是一些定义:
特别地,对于长度为 1 的序列,它既是「上升摆动序列」,也是「下降摆动序列」。

序列中的某个元素被称为「峰」,当且仅当该元素两侧的相邻元素均小于它。如序列 [1,3,2,4] 中,3 就是一个「峰」。

序列中的某个元素被称为「谷」,当且仅当该元素两侧的相邻元素均大于它。如序列 [1,3,2,4] 中,2 就是一个「谷」。

特别地,对于位于序列两端的元素,只有一侧的相邻元素小于或大于它,我们也称其为「峰」或「谷」。如序列 [1,3,2,4] 中,1 也是一个「谷」,4 也是一个「峰」。

因为一段相邻的相同元素中我们最多只能选择其中的一个,所以我们可以忽略相邻的相同元素。现在我们假定序列中任意两个相邻元素都不相同,即要么左侧大于右侧,要么右侧大于左侧。对于序列中既非「峰」也非「谷」的元素,我们称其为「过渡元素」。如序列 [1,2,3,4] 中,2 和 3 都是「过渡元素」。

解题:模拟图像,将数字差值变成坡度。

1. 上下坡中有平坡

舍弃curdiff = 0,平坡时差值为0。

2.数组首尾两端

题目中限定了:仅有一个元素或者含两个不等元素的序列也视作摆动序列。

3.单调坡度有平坡

当某段大体成递增趋势时,只用考虑最高波峰,与初始过渡元素。

  public int wiggleMaxLength(int[] nums) {int prediff = 0,curdiff = 0;//prediff相当于初始0,curdiff是当前值int result = 1;//最右端的for (int i = 0; i < nums.length-1; i++) {curdiff = nums[i+1] - nums[i];if((prediff >= 0&&curdiff<0)||(prediff <= 0&&curdiff>0)){result++;prediff = curdiff;//记录递增的第一个,后面若没遇到摆动的话,不必进行记录}}//某段是递增序列,递减序列。//连续递增序列return result;}

最大子序和

局部最优:当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小。
方法:贪心。

贪心贪的是哪里呢?

如果 -2 1 在一起,计算起点的时候,一定是从 1 开始计算,因为负数只会拉低总和,这就是贪心贪的地方!

误区:如果输入用例都是-1,或者 都是负数,这个算法>贪心算法跑出来的结果是 0, 这是又一次证明脑洞模拟不靠谱的经典案例,实际为最大负数。

 public int maxSubArray(int[] nums) {int result = Integer.MIN_VALUE;int count = 0;for (int i = 0; i < nums.length; i++) {count += nums[i];if (count>result){result = count;}if (count<0){count =0;}}return result;}

http://www.ppmy.cn/news/1563796.html

相关文章

如何禁用 PySpark 在运行时打印信息

我已经开始使用 PySpark。PySpark 的版本是3.5.4&#xff0c;它是通过 进行安装的pip。 这是我的代码&#xff1a; from pyspark.sql import SparkSession pyspark SparkSession.builder.master("local[8]").appName("test").getOrCreate() df pyspark…

音视频入门基础:RTP专题(3)——SDP简介

一、引言 会话描述协议&#xff08;Session Description Protocol&#xff0c;简称SDP&#xff09;描述了流媒体的初始化参数&#xff0c;包含音视频的编解码器、源地址和时间信息。SDP协议从不会被单独使用&#xff0c;而依赖于RTP和RTSP等协议。SDP也作为WebRTC的组件之一&a…

论文高级GPT指令推荐

一、科研选题与方向确认二、文献综述与整理 一、科研选题与方向确认 头脑风暴选题指令&#xff1a;Brainstorm potential research topics within [你的研究领域], focusing on areas with limited existing research and significant potential impact. For each topic, prov…

基于Java的愤怒的小鸟游戏的设计与实现【源码+文档+部署讲解】

目录 摘要 Abstract 1 绪论 1.1 游戏开发的背景 1.2 典型的Java游戏介绍 1.2.1 Minecraft介绍 1.2.2 Super Mario Bros介绍 1.2.3 The Sims介绍 1.3 游戏开发的意义 2 开发环境 2.1 开发语言 2.2 开发工具 2.3 JDK介绍 2.4 Java Awt介绍 2.5 Java Swing 介绍 2.…

ZCC1923替代BOS1921Piezo Haptic Driver with Digital Front End

FEATURES • High-Voltage Low Power Piezo Driver o Drive 100nF at 190VPP and 250Hz with 490mW o Drives Capacitive Loads up to 1000nF o Energy Recovery o Differential Output o Small Solution Footprint, QFN & WLCSP • Low Quiescent Current: SHUTDOWN; …

vulnhub靶场【IA系列】之Keyring

前言 靶机&#xff1a;IA-Keyring&#xff0c;IP地址为192.168.10.11 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.2 都采用虚拟机&#xff0c;网卡为桥接模式 文章中涉及的靶场以及相关工具&#xff0c;放置在网盘中&#xff0c;链接https://pan.quark.cn/s/55d71…

安全开发 javaEE应用 servlet 路由技术 生命周期 JDBC数据库操作

前言 什么是javaEE &#xff1f; javaEE就是基本的企业开发语言 什么是servlet(翻译是小服务程序 或者 是服务连接器) 就是本地服务器和http协议的中间件 Servlet 路由 Servlet是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或其他HTTP客户端的请求和HT…

算法15、双指针(归并排序两种做法)

&#x1f330;1、two-Sum严格递增序列 晴问算法 因为是有序的序列&#xff08;严格递增&#xff09;所以可以考虑用二分查找的思路&#xff01; 二分查找变体版-双指针。 因为严格递增的序列特性&#xff0c;让i, j(或者left, right)的枚举互相牵制&#xff0c;因而我们可以…