代码随想录算法训练营第三十一天| 455.分发饼干、376.摆动序列、53.最大子序和

系列文章目录


目录

  • 系列文章目录
  • 455.分发饼干
    • 贪心算法
      • 大饼干喂胃口大的(先遍历胃口)
      • 胃口大的先吃大饼干(先遍历饼干)
      • 小饼干先喂胃口小的(先遍历胃口)
      • 胃口小的先吃小饼干(先遍历饼干)
  • 376. 摆动序列
    • 贪心算法
      • 只关心上下坡摆动,对所有平坡忽略(总体看)[看了其他人的想法,好理解一些]
      • 只关心节点左右的坡度(局部),若两边坡度相反则是峰值,考虑了平坡的情况[自己想不出来]
  • 53. 最大子序和
    • ①暴力解法(双层for循环,超时)
    • ②贪心解法


455.分发饼干

贪心算法

在这里插入图片描述

大饼干喂胃口大的(先遍历胃口)

import java.util.Arrays;
class Solution {public int findContentChildren(int[] g, int[] s) {//先从小到大自然排序Arrays.sort(g);Arrays.sort(s);int lenG = g.length;int rightS = s.length - 1;int count = 0;//记录满足的孩子个数for (int i = lenG - 1; i >= 0; i--) {//遍历胃口if (rightS >= 0 && s[rightS] >= g[i]) {// 遍历饼干(要先判断是否还有饼干再遍历)count++;rightS--;}}return count;}
}

胃口大的先吃大饼干(先遍历饼干)

import java.util.Arrays;
class Solution {public int findContentChildren(int[] g, int[] s) {//先从小到大自然排序Arrays.sort(g);Arrays.sort(s);int rightG = g.length - 1;int count = 0;for (int i = s.length - 1; i >= 0; i--) {while (rightG >= 0) {if (s[i] >= g[rightG]) {count++;rightG--;break;}rightG--;}}return count;}
}

小饼干先喂胃口小的(先遍历胃口)

import java.util.Arrays;
class Solution {public int findContentChildren(int[] g, int[] s) {Arrays.sort(g);Arrays.sort(s);int count = 0;int leftS = 0;for (int i = 0; i < g.length; i++) {while (leftS < s.length) {if (s[leftS] >= g[i]) {count++;leftS++;break;}leftS++;}}return count;}
}

胃口小的先吃小饼干(先遍历饼干)

import java.util.Arrays;
class Solution {public int findContentChildren(int[] g, int[] s) {Arrays.sort(g);Arrays.sort(s);int count = 0;int leftG = 0;for (int i = 0; i < s.length; i++) {if (leftG < g.length &&s[i]>=g[leftG]){count++;leftG++;}}return count;}
}

376. 摆动序列

贪心算法

只关心上下坡摆动,对所有平坡忽略(总体看)[看了其他人的想法,好理解一些]

class Solution {int mark = 0;// 记录是否出现摆动,没出现摆动为0,出现摆动后上坡为1,下坡为-1int count = 1;//因1 <= nums.length <= 1000,故最少有一个元素public int wiggleMaxLength(int[] nums) {// nums.length = 1或2的情况可以包含在下面for循环中// if (nums.length == 1) return 1; // 不进入for循环,直接返回1// if (nums.length == 2) return nums[0] == nums[1] ? 1 : 2; // 有摆动才返回2,否则返回1// 策略:只有第一次出现摆动,以及上下坡的转折点的时候,才res++for (int i = 1; i < nums.length; i++) {int prediff = nums[i] - nums[i - 1];// 如果之前都没出现摆动(第一次出现摆动)if (mark == 0) {if (prediff > 0) {// 第一次出现的摆动为上坡mark = 1;count++;}if (prediff < 0) {// 第一次出现的摆动为下坡mark = -1;count++;}//平坡代表没有摆动,不处理}// 如果遇到上坡,判断上一个摆动是否为下坡,是再记录结果并更新摆动if (prediff > 0 && mark == -1) {mark = 1;// 记录上坡count++;}// 如果遇到下坡,判断上一个摆动是否为上坡,是再记录结果并更新摆动if (prediff < 0 && mark == 1) {mark = -1;// 记录下坡count++;}// 注意:此处包含对了平坡的忽略}return count;}
}

只关心节点左右的坡度(局部),若两边坡度相反则是峰值,考虑了平坡的情况[自己想不出来]

class Solution {int count = 1;//默认最右面有一个峰值int prediff = 0;public int wiggleMaxLength(int[] nums) {for (int i = 0; i < nums.length - 1; i++) {int curdiff = nums[i + 1] - nums[i];//i节点右边坡度// 出现峰值if (prediff >= 0 && curdiff < 0 || prediff <= 0 && curdiff > 0) {count++;prediff = curdiff;}}return count;}
}

53. 最大子序和

①暴力解法(双层for循环,超时)

第一层 for 就是设置起始位置,第二层 for 循环遍历数组寻找最大值。

class Solution {int sum = 0;int maxSum = Integer.MIN_VALUE;//将最大和先置为int的最小值public int maxSubArray(int[] nums) {for (int i = 0; i < nums.length; i++) {sum = 0;//每遍历一个节点先将sum置为0for (int j = i; j < nums.length; j++) {sum += nums[j];maxSum = sum > maxSum ? sum : maxSum;}}return maxSum;}
}

在这里插入图片描述

②贪心解法

思路:

  1. 局部最优:每遍历一个元素,都记录着截止到当前元素的最大子数组和(当前元素不一定是最大子数组和对应子数组的结尾)。
  2. 全局最优:遍历到最后一个元素,就相当于获得了全局最大子数组和。
    maxSum 要初始化为最小负数,因数组可能全是负数,初始化为0会导致最大和为0
class Solution {int sum = 0;int maxSum = Integer.MIN_VALUE;//将最大和先置为int的最小值public int maxSubArray(int[] nums) {for (int i = 0; i < nums.length; i++) {sum += nums[i];if (sum > maxSum) maxSum = sum;// 取区间累计的最大值(相当于不断确定最大子序终止位置)if (sum <= 0) {sum = 0; // 相当于重置最大子序起始位置,因为遇到负数一定是拉低总和}}return maxSum;}
}

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/808811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

14-pyspark的DataFrame使用总结

目录 前言DataFrame使用总结 DataFrame的构建方法1&#xff1a;通过列表构建方法2&#xff1a;通过Row对象构建方法3&#xff1a;通过表Schema构建 方法4&#xff1a;rdd结合字符串构建 DataFrame的方法 PySpark实战笔记系列第五篇 10-用PySpark建立第一个Spark RDD(PySpark实战…

CSGO游戏搬砖,落袋为安才是王道

1.市场燃了&#xff0c;都在赚钱&#xff0c;谁在赔钱&#xff1f; 首先要分清“纸面富贵”和“落袋为安”。市场燃了&#xff0c;你库存里的渐变大狙从5000直接涨到了1W&#xff0c;你赚到5000了吗&#xff1f;严格讲&#xff0c;你需要把库存里的渐变大狙卖出去&#xff0c;提…

每天五分钟深度学习:逻辑回归算法的损失函数和代价函数是什么?

本文重点 前面已经学习了逻辑回归的假设函数,训练出模型的关键就是学习出参数w和b,要想学习出这两个参数,此时需要最小化逻辑回归的代价函数才可以训练出w和b。那么本节课我们将学习逻辑回归算法的代价函数是什么? 为什么不能平方差损失函数 线性回归的代价函数我们使用…

2024-基于人工智能的药物设计方法研究-AIDD

AIDD docx 基于人工智能的药物设计方法研究 AI作为一种强大的数据挖掘和分析技术已经涉及新药研发的各个阶段&#xff0c;有望推动创新药物先导分子的筛选、设计和发现&#xff0c;但基于AI的数据驱动式创新药物设计和筛选方法仍存在若干亟待解决的问题。我们课题组的核心研究…

基于达梦数据库开发-python篇

文章目录 前言一、搭建demo前提初始化简单demo 二、可能出现的异常情况DistutilsSetupErrorNo module named dmPythonlist报错 总结 前言 出于信创的考虑&#xff0c;近年来基于国产数据库达梦的应用开发逐渐变多。本文将介绍在windows环境下基于DM8版本的python的简单开发使用…

matlab使用教程(40)—二维傅里叶变换和多项式插值

1使用 FFT 进行多项式插值 使用快速傅里叶变换 (FFT) 来估算用于对一组数据进行插值的三角函数多项式的系数。 1.1数学中的 FFT FFT 算法通常与信号处理应用相关&#xff0c;但也可以在数学领域更广泛地用作快速计算工具。例如&#xff0c;通常通过解算简单的线性系统来计算…

24/04/11总结

IO流(First edition): IO流&#xff1a;用于读入写出文件中的数据 流的方向&#xff08;输入指拿出来,输出指写进去) 输入流:读取 输出流:写出 操作文件类型 字节流:所有类型文件 字符流:纯文本 字节流: InputStream的子类:FileInputStream:操作本地文件的字节输入流 OutputSt…

ssm036基于Java的图书管理系统+jsp

图书管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本图书管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处…

光伏电站运维管理系统功能全面详解

一、系统概述 光伏电站运维管理系统是一款专为光伏电站设计的综合性管理平台。该系统集成了先进的数据监测、故障诊断、运维任务管理、设备信息管理、用户权限管理以及系统维护与升级等功能&#xff0c;旨在提供全面、高效、智能的光伏电站运维服务&#xff0c;确保电站安全、…

java国产化云HIS基层医院系统源码 SaaS模式

目录 ​ 云HIS开发环境 功能模块介绍&#xff1a; 1、门诊模块 2、住院模块 3、药房、药库模块 ​编辑 4、电子病历模块 5、统计报表模块 6、系统管理模块 系统优势 云his之电子病历子系统功能 云 his 系统是运用云计算、大数据、物联网等新兴信息技术&#xff0c;按…

【C++初阶】C++简单入门(长期维护)

本篇博客是对C的一些简单知识分享&#xff0c;有需要借鉴即可。 C简单入门目录 一、C前言1.C的概念&#xff1a;2.C发展历程3.C如何学&#xff1f; 二、C入门1.C关键字(C98标准)2.命名空间3.C输入&输出①概念说明②使用说明③特征说明④细节拓展⑤cout与cin的意义 4.缺省参…

JavaScript_注释数据类型

JavaScript_语法_注释&数据类型&#xff1a; 1.2注释&#xff1a; 1.单行注释&#xff1a;//注释内容 2.多行注释&#xff1a;/*注释内容*/ 1.3数据类型&#xff1a; 1.原始数据类型(基本数据类型)&#xff1a;&#xff08;只有这五种&#xff09; 1.number&#xff1a;数字…

参花期刊投稿发表论文

《参花》是由国家新闻出版总署批准&#xff0c;吉林省文化和旅游厅主管&#xff0c;吉林省文化馆主办的正规文学类期刊。文学是用语言塑造形象反映社会生活的一种语言艺术&#xff0c;是自觉、独立而又面向整个社会的艺术&#xff0c;是文化中极具强烈感染力的重要组成部分&…

经典机器学习模型(八)梯度提升树GBDT详解

经典机器学习模型(八)梯度提升树GBDT详解 Boosting、Bagging和Stacking是集成学习(Ensemble Learning)的三种主要方法。 Boosting是一族可将弱学习器提升为强学习器的算法&#xff0c;不同于Bagging、Stacking方法&#xff0c;Boosting训练过程为串联方式&#xff0c;弱学习器…

如何在 7 天内掌握C++?

大家好&#xff0c;我是小康&#xff0c;今天我们来聊下如何快速学习 C 语言。 本篇文章适合于有 C 语言编程基础的小伙伴们&#xff0c;如果还没有学习过 C&#xff0c;请看这篇文章先入个门&#xff1a;C语言快速入门 引言&#xff1a; C&#xff0c;作为一门集面向过程和…

【Python】科研代码学习:十七 模型参数合并,safetensors / bin

【Python】科研代码学习&#xff1a;十七 模型参数合并&#xff0c;safetensors / bin 前言解决代码知识点&#xff1a;safetensors 和 bin 的区别&#xff1f;知识点&#xff1a;save_pretrained 还会新增的文件知识点&#xff1a;在保存模型参数时&#xff0c;大小发生了成倍…

pytest教程-25-生成覆盖率报告插件-pytest-cov

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了pytest多重断言插件pytest-assume,本小节我们讲解一下pytest生成覆盖率报告插件pytest-cov。 测量代码覆盖率的工具在测试套件运行时观察你的代码&#xff0c;并跟踪哪些行被运行&#xff0c;…

10:00面试,10:08就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到8月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

【我的小工具】生成React页面类

有了数据表的结构信息&#xff0c;就能生成React 的页面类&#xff0c;快捷方便。 生成界面如下&#xff1a; 生成的React FrmUser.js页面如下&#xff1a; 只需再写里面的操作逻辑代码。

Claude使用教程

claude 3 opus面世后&#xff0c;网上盛传吊打了GPT-4。网上这几天也已经有了许多应用&#xff0c;但竟然还有很多小伙伴不知道国内怎么用gpt&#xff0c;也不知道怎么去用这个据说已经吊打了gpt-4的claude3。 今天我们想要进行的一项尝试就是—— 用claude3和gpt4&#xff0c…