代码随想录day27 贪心1

news2024/12/26 0:35:41

题目:455.分发饼干  376.摆动序列   53.最大子序和

需要重做:全部

贪心算法其实就是没有什么规律可言,所以大家了解贪心算法 就了解它没有规律的本质就够了。

不用花心思去研究其规律, 没有思路就立刻看题解

理论基础

贪心的本质是选择每一阶段的局部最优,从而达到全局最优

怎么判断能不能用贪心:举反例。举的出来则不用,举不出来则用贪心。

贪心算法一般分为如下四步:最重要的是想清楚局部最优,能否推倒出全局最优。

  • 将问题分解为若干个子问题
  • 找出适合的贪心策略
  • 求解每一个子问题的最优解
  • 将局部最优解堆叠成全局最优解

455.分发饼干

思路:1.首先排序

2.遍历饼干,从小到大,index记录到第几个孩子。

3.也可以遍历孩子,从大到小,index记录第几个饼干

注意:

另外两种组合也可以写,只是要多加几个变量来记录和控制。

代码:

1.从前往后,遍历饼干,即先满足小胃口

class Solution {
public:
    int findContentChildren(vector<int>& g, vector<int>& s) {
        sort(g.begin(),g.end());
        sort(s.begin(),s.end());
        int index=0;
        for(int i=0;i<s.size();i++){
            if(index<g.size()&&g[index]<=s[i])
            index++;
        }
        return index;
    }
};

2.从前往后,遍历孩子(麻烦)

class Solution {
public:
    int findContentChildren(vector<int>& g, vector<int>& s) {
        sort(g.begin(),g.end());
        sort(s.begin(),s.end());
        int index=0,num=0,time=0;
        for(int i=0;i<g.size()&&(time<=s.size()||time<=g.size());i++){
            time++;
            if(index<s.size()&&s[index++]>=g[i]){
                num++;
                continue;
            }
            i--;
        }
        return num;
    }
};

3.从后往前,遍历孩子.即先满足大胃口

class Solution {
public:
    int findContentChildren(vector<int>& g, vector<int>& s) {
        sort(g.begin(),g.end());
        sort(s.begin(),s.end());
        int num=0,index=s.size()-1;
        for(int i=g.size()-1;i>=0;i--){
            if(index>=0&&g[i]<=s[index]){
                index--;
                num++;
            }
        }
        return num;
    }
};

376. 摆动序列

思路1:1.因为题目说了可以增删元素,所以就在增删的基础上进行搜索。

2.只要是摆动的,就一定是上下上下或下上下上,所以一个波谷就是一个元素。

3.选择curdiff和prediff进行值的更新。res记录

4.考虑几种情况:

        1.正常,全是波峰波谷:prediff<0&&curdiff>0||prediff>0&&curdiff<0

        2.两端低或高中间平:1-2-2-2-1,这时候选择跳过前面的两个2,只记录最后一个2,则条件需要为:prediff<=0&&curdiff>0||prediff>=0&&curdiff<0。(只看最后一个2所处的左右状况就可以写出来)。

        3.上坡中间有多个平坡:1-2-2-2-3-4-4-5。这个时候,prefix的更新时间就必须要在最后一个平坡元素确认的时候才更新,以及正常坡的时候更新。

注意:res初始值为1。prediff可以由curdiff继承来。

代码:

class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
       int curdiff=0;
       int prediff=0;
       int res=1;
       for(int i=0;i<nums.size()-1;i++){
        curdiff=nums[i+1]-nums[i];
        if(prediff<=0&&curdiff>0||prediff>=0&&curdiff<0){
            res++;
            prediff=curdiff;
        }
       }
       return res;
    }
};

思路2:动态规划。等学到动态规划再回来写

思路3:在思路2基础上,可以用两棵线段树来维护区间的最大值。

53. 最大子序和

思路:首先想法是暴力,从i开始,里面定义一个count,然后从j开始循环到最后。得到最大值。这样的代码超时了。

然后考虑贪心:局部为正且大即可

我需要的是不断求取为正且大的区间和,所以只要这段区间和的值小于0,我就让区间和count=0;

如何记录最大的?res,如果res<count ;则赋值。

注意:每次count都+=num,只是改变count的值。

思路是:不能让连续和为负数的时候再加上元素,而不是!不能让连续和加上负数

代码:

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int res=INT_MIN;
        int count=0;
        for(int i=0;i<nums.size();i++){
            count+=nums[i];
            if(count>res){
                res=count;
            }
            if(count<0)count=0;
        }
        return res;
    }
};

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

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

相关文章

SpringCloud 入门(4)—— 网关

上一篇&#xff1a;SpringCloud 入门&#xff08;3&#xff09;—— Nacos配置中心-CSDN博客 Spring Cloud Gateway 作为 Spring Cloud 生态系统的一部分&#xff0c;主要在微服务架构中充当 API 网关的角色。它提供了统一的入口点来处理所有的 HTTP 请求&#xff0c;并将这些请…

在linux系统的docker中安装GitLab

一、安装GitLab&#xff1a; 在安装了docker之后就是下载安装GitLab了&#xff0c;在linux系统中输入命令&#xff1a;docker search gitlab就可以看到很多项目&#xff0c;一般安装第一个&#xff0c;它是英文版的&#xff0c;如果英文不好可以安装twang2218/gitlab-ce-zh。 …

vscode打开下一个文件的时候上一个文件会关闭

解决方法&#xff1a; 你可以通过设置 workbench.editor.enablePreview 来控制在 VS Code 中打开文件时是否会关闭上一个文件。将其设置为 false 可以防止这种行为。 {"workbench.editor.enablePreview": false } 在设置编辑器中显示 "workbench.editor.enab…

PostgreSQL编译安装教程

下载安装 1.在家目录创建一个文件夹放下载安装包 mkdir softwarecd software 2.下载文件压缩包 wget https://ftp.postgresql.org/pub/source/v16.0/postgresql-16.0.tar.gz 3.解压 tar -xzvf postgresql-16.0.tar.gz 4.编译 在software/postgresql-16.0下 cd software…

访谈积鼎科技总经理:国产CFD软件发展与未来趋势展望

傅彦国&#xff0c;上海积鼎信息科技有限公司创始人 记者&#xff1a;请傅总介绍下我国流体仿真行业的发展现状是怎样的&#xff1f; 傅彦国&#xff1a;自2018年政府加大了对核心技术自主研发的支持力度&#xff0c;国产CFD软件逐渐步入发展正轨。 首先&#xff0c;从市场规…

重温设计模式--代理模式

文章目录 定义UML图代理模式主要有以下几种常见类型&#xff1a;代理模式涉及的主要角色有&#xff1a;C 代码示例 定义 代理模式&#xff08;Proxy Pattern&#xff09;属于结构型设计模式&#xff0c;它为其他对象提供一种代理以控制对这个对象的访问。 通过引入代理对象&am…

R语言数据分析案例46-不同区域教育情况回归分析和探索

一、研究背景 教育是社会发展的基石&#xff0c;对国家和地区的经济、文化以及社会进步起着至关重要的作用。在全球一体化进程加速的今天&#xff0c;不同区域的教育发展水平呈现出多样化的态势。这种差异不仅体现在教育资源的分配上&#xff0c;还表现在教育成果、教育投入与…

uni-app使用组件button遇到的问题

在HBuilder X工具中新建一个空白项目&#xff0c; 1、新建一个about页 然后在pages.json文件里加上路由 2、然后看下导航的方法&#xff0c;发现找不到navigateTo方法 参考&#xff1a;button | uni-app官网 第3行和第4行的代码倒是没问题的&#xff0c;第5行的代码有问题执行…

git自己模拟多人协作

目录 一、项目克隆 二、多人协作 1.创建林冲仓库 2.协作处理 3.冲突处理 三、分支推送协作 1.创建develop分支 2.发现git push无法把develop推送到远程 ​编辑 3.本地的分支推送到远程分支 四、分支拉取协作 五、远程分支的删除 远程仓库用的gitee 一、项目克隆 …

基于springboot+vue实现的卷烟营销统计分析系统 (源码+L文+ppt)4-129

摘 要 卷烟行业的快速发展使得卷烟营销统计分析系统成为了一个必不可少的工具。基于Java的卷烟营销统计分析系统旨在提供高效、准确和便捷的适用卷烟营销服务。本文讲述了基于java语言开发&#xff0c;后台数据库选择MySQL进行数据的存储。该软件的主要功能是进行卷烟营销统计…

解析CGI(通用网关接口)技术

在互联网技术飞速发展的今天&#xff0c;CGI&#xff08;Common Gateway Interface&#xff0c;通用网关接口&#xff09;作为一种常见的服务器端脚本技术&#xff0c;依然在许多老旧网站和小型网站中广泛使用。尽管如今有许多更现代的技术替代了CGI&#xff0c;但它仍然是理解…

OPPO C++面试题及参考答案

五层协议每层包含的协议 在计算机网络的五层协议体系结构&#xff08;自下而上为物理层、数据链路层、网络层、传输层和应用层&#xff09;中&#xff0c;各层包含多种协议。 物理层主要负责在物理介质上传输原始的比特流&#xff0c;包括像 RJ - 45 接口标准等物理接口规范&am…

OpenAI 普及 ChatGPT,开通热线电话,近屿智能深耕AI培训

12月19日&#xff0c;在OpenAI直播活动的第10天&#xff0c;宣布允许用户通过电话或WhatsApp与ChatGPT进行交互。并在美国推出 ChatGPT 热线电话&#xff0c;用户拨打后可与 ChatGPT 进行语音对话。 这项服务的一个亮点在于它兼容各种类型的通信设备——不论是现代智能手机如iP…

四种电子杂志制作软件

​大家好&#xff0c;今天给大家种草四种超级实用的电子杂志制作软件。无论你是专业出版人士&#xff0c;还是业余爱好者&#xff0c;这四款软件都能帮助你轻松制作出精美的电子杂志。让我们一起来看看吧&#xff01; 1.FLBOOK FLBOOK是一款在线仿真翻页制作H5电子画册&#x…

idea配置

2024.3 idea 重装idea启动失败样式常用插件 重装idea启动失败 1、检查环境变量&#xff0c;是否已设置 2、检查安装目录下&#xff0c;或对应的环境变量对应的路径文件下 是否有javaagent&#xff0c;可先移除或者检查配置是否正确 样式 1、展示上方工具栏 2、展示内存使用…

微信小程序的轮播图学习报告

微信小程序轮播图学习报告 好久都没分享新内容了&#xff0c;实在惭愧惭愧。今天给大家做一个小程序轮播图的学习报告。 先给大家看一下我的项目状态&#xff1a; 很空昂&#xff01;像一个正在修行的老道&#xff0c;空的什么也没有。 但是我写了 4 个 view 容器&#xff0c;…

L24.【LeetCode笔记】 杨辉三角

目录 1.题目 2.分析 模拟二维数组的大致思想 杨辉三角的特点 二维数组的元素设置代码 两个参数returnSize和returnColumnSizes 理解"有效"的含义 完整代码 提交结果 1.题目 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉…

项目亮点案例

其实对我来说是日常操作&#xff0c;但是如果在面试的时候面试者能把日常的事情总结好发出来&#xff0c;其实足矣。 想让别人认同项目&#xff0c;选取的示例需要包含以下要素&#xff1a; 亮点项目四要素&#xff1a;明确的目标&#xff0c;问题点&#xff0c;解决方法和结果…

Vue.js组件(5):自定义组件

1 介绍 下面的所有组件全部基于VUE3 TS element plus编写&#xff0c;其中部分组件可能涉及到其他技术栈&#xff0c;会进行单独说明。 2 基础组件 2.1 表格操作组件TableToolButton 此组件用于对表格进行增加、编辑、删除、导出操作。 2.1.1 组件属性 addVisible&#x…

ctfhub技能树——disable_functions

LD_PRELOAD 来到首页发现有一句话直接就可以用蚁剑连接 根目录里有/flag但是不能看;命令也被ban了就需要绕过了 绕过工具在插件市场就可以下载 如果进不去的话 项目地址: #本地仓库;插件存放 antSword\antData\plugins 绕过选择 上传后我们点进去可以看到多了一个绕过的文件;…