day-33 代码随想录算法训练营(19) 贪心part03

news2024/11/24 20:48:19

1005.K次取反后最大化的数组和

思路一:求出正负数的个数,根据k值来进行取反

134.加油站

思路:考虑总油量和当前剩余油量,同时遍历两个数组,当前剩余油量小于0时,说明在 i 之前都无法出发。

135.分发糖果 

思路:考虑左右两个维度,并且在考虑第二个维度的时候,需要取上一个维度和当前维度的最大值,而不是盲目添加

 452.用最少数量的箭引爆气球

思路:先按照左边界进行排序,再遍历数组
  • 1.判断第 i 个位置的气球和第 i-1 个位置的气球是否重合,不重合的话需要箭+1;
  • 2.重合的话,需要更新右边界,因为下一个气球需要跟前两个气球都重合
class Solution {
public:
    int findMinArrowShots(vector<vector<int>>& points) {
        int n=points.size();
        if(n==0) return 0;
        int res=1;
        sort(points.begin(),points.end());
        int end=points[0][1];
        for(int i=1;i<n;i++){//相邻两两比较
            if(points[i][0]>points[i-1][1])//不重合时,需要增加箭
                res++;
            else//重合时,需要更新重合右边界
                points[i][1]=min(points[i-1][1],points[i][1]);
        }
        return res;
    }
};

435.无重叠区间

思路:计算出重叠区间个数
  • 1.排序
  • 2.当第 i 个区间和第 i-1 个区间重叠时,个数+1,因为第 i 个区间相当于要删掉,所以更新第 i 个区间的右边界为第 i-1 个区间的右边界和第 i 个区间的右边界的较小值。

 为什么重叠时,当前区间的右边界要更新为较小值呢?因为我们要求最少删除的重叠区间,就是求最大的不重叠区间,排序后,当两个区间重叠时,我们要选择较早结束的那个区间留下来,因为要避免和后面的区间重叠!!!

763.划分字母区间

思路:获取每个字母的最远出现长度,然后第二次遍历数组,使用两个变量维护一个重复区间,
右边界被遍历到之前一直处于更新状态;
当右边界被遍历到时,说明区间内的字母接下来都不会出现了(因为记的是最远出现距离),此时记录边界长度,并且把下一个区间的左边界更新到 i+1;
class Solution {
public:
    vector<int> partitionLabels(string s) {
        int hash[27]={0};
        for(int i=0;i<s.size();i++)//记录字母在字符串中出现的最远位置
            hash[s[i]-'a']=i;
        vector<int>res;
        int left=0,right=0;
        for(int i=0;i<s.size();i++){
            right=max(right,hash[s[i]-'a']);//记录这一段区间内最大长度
            if(i==right){//当遍历到最远位置时
                res.push_back(right-left+1);//获取当前区间的长度
                left=i+1;//把左边界放到后面
            }
        }
        return res;
        
    }
};

56.合并区间

思路一:先排序,然后根据右边界进行判断;重叠和不重叠的情况(相比较之前的题轻松一些)

 

class Solution {
public:
    // static bool cmp(const vector<int>&a,const vector<int>&b){
    //     return a[0]<b[0];
    // }
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        int n=intervals.size();
        sort(intervals.begin(),intervals.end());
        vector<vector<int>>res;
        vector<int>mid;
        mid=intervals[0];
        for(int i=1;i<n;i++){
            cout<<intervals[i][0]<<endl;
            if(intervals[i][0]<=intervals[i-1][1]){//重合时,更新mid最大边界,
                                                   //并且更新当前区间最大边界
                mid[1]=max(intervals[i][1],intervals[i-1][1]);
                intervals[i][1]=mid[1];
            }
            else{//不重叠时,添加mid并且更新mid为当前数组
                res.push_back(mid);
                mid.clear();
                mid=intervals[i];
            }
        }
        if(!mid.empty()) res.push_back(mid);  //还有结束没添加的情况
        return res;
        
    }
};

738.单调递增的数字

思路:从后向前遍历,找到前一位比当前位大的数,把前一位减1,然后记录当前位置
           二次遍历,把当前位置以后的位置全部编程最大值9
class Solution {
public:
    int monotoneIncreasingDigits(int n) {
        string mid=to_string(n);
        int flag=mid.size();
        for(int i=mid.size()-1;i>0;i--){
            if(mid[i]<mid[i-1]){
                flag=i;//记录改变位置的后一位
                mid[i-1]--;//前一位减1
            }
        }
        for(int i=flag;i<mid.size();i++)
            mid[i]='9';//从改变位置后面依次改成9
        
        return stoi(mid);
    }
};

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

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

相关文章

yml基本语法与支持的数据格式

一、yml基本语法 1、yml文件以缩进代表层级关系 2、缩进不允许使用tab只能使用空格 3、空格的个数不重要&#xff0c;只要相同层级的元素左对齐即可 4、大小写敏感 5、数据格式为&#xff0c;名称:(空格)值 二、yml支持的数据格式 1、对象&#xff1a;键值对的集合(key:…

EDAS系统提交 | 编译报错显示 fonttype: Font DejaVuSans is of type Type 3.

目录 1. 问题&#xff1a;fonttype: Font DejaVuSans is of type Type 3. 2. 原因及解决&#xff1a;用python的matplotlib画的图片转出的pdf有问题&#xff0c;包含Type 3字体。 3. 具体解决过程&#xff1a;在用python代码画图时&#xff0c;添加一行代码&#xff0c;重新…

第八周第一天学习总结 | MySQL入门及练习学习第三天

实操练习 1.创建一个名为 lianxi 的数据库 2.在 lianxi 库内创建一个名为 xinxi 的数据表要求如下&#xff1a; 包含信息&#xff1a;编号&#xff0c;姓名&#xff0c;备注&#xff0c;籍贯&#xff0c;部门&#xff0c;公司。 3.给xinxi表添加相应信息&#xff1a; 4.查询…

kafka复习:(22)一个分区只能被消费者组中的一个消费者消费吗?

默认情况下&#xff0c;一个分区只能被消费者组中的一个消费者消费。但可以自定义PartitionAssignor来打破这个限制。 一、自定义PartitionAssignor. package com.cisdi.dsp.modules.metaAnalysis.rest.kafka2023;import org.apache.kafka.clients.consumer.internals.Abstrac…

【环境配置】Android-Studio-OpenCV-JNI以及常见错误 ( 持续更新 )

最近一个项目要编译深度学习的库&#xff0c;需要用到 opencv 和 JNI&#xff0c;本文档用于记录环境配置中遇到的常见错误以及解决方案 Invalid Gradle JDK configuration found failed Invalid Gradle JDK configuration foundInvalid Gradle JDK configuration found. Open…

【Acwing905】区间选点贪心策略超清晰证明!!包含题解

题目描述 贪心策略 首先按右端点对区间进行排序 然后从左到右遍历每一个区间&#xff0c;如果这个区间还没有选中的点&#xff0c;那么就选择这个区间的右端点&#xff0c;否则就pass掉这个区间 举一个栗子 贪心策略证明 假设最少的选点数为&#xff1a;ans 利用上述贪心策…

【JUC基础】JUC入门基础

目录 什么是JUC线程和进程锁传统的 synchronizedLock 锁Synchronized 与 Lock 的区别 生产者和消费者问题Synchronized 版Lock版Condition 的优势&#xff1a;精准通知和唤醒线程 8 锁现象问题1&#xff1a;两个同步方法&#xff0c;先执行发短信还是打电话&#xff1f;问题2&a…

代码随想录刷题笔记 (python版本) 持续更新.....

代码随想录刷题笔记总结: https://www.programmercarl.com/ 个人学习笔记 如有错误欢迎指正交流1. 数组 1.1 理论基础 详细介绍:https://www.programmercarl.com/%E6%95%B0%E7%BB%84%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 数组下标都是从0开始的。数组内存空间的地址是…

什么是亚马逊类目核心关键词?

亚马逊类目核心关键词是指在亚马逊平台上&#xff0c;与特定产品类别相关且具有较高搜索量和竞争度的关键词。这些关键词在产品标题、描述、属性和搜索关键字等位置使用&#xff0c;有助于提高产品的曝光度和搜索排名&#xff0c;并吸引潜在买家的注意。选择适当的核心关键词可…

@Configuration 注解的 Full 模式和 Lite 模式!

Configuration 注解相信各位小伙伴经常会用到&#xff0c;但是大家知道吗&#xff0c;这个注解有两种不同的模式&#xff0c;一种叫做 Full 模式&#xff0c;另外一种则叫做 Lite 模式。 准确来说&#xff0c;Full 模式和 Lite 模式其实 Spring 容器在处理 Bean 时的两种不同行…

Nacos基础(2)——nacos的服务器和命名空间 springBoot整合nacos 多个nacos配置的情况

目录 引出nacos服务器和命名空间Nacos服务器命名空间 springBoot整合nacosspringcloud Alibaba 版本与springcloud对应关系引包配置maincontroller 报错以及解决【报错】错误&#xff1a;缺少服务名称报错&#xff1a;9848端口未开放 启动测试引入多个nacos配置多个配置的情况没…

基于java swing和mysql实现的学生选课成绩信息管理系统(源码+数据库+ER图文档+运行指导视频)

一、项目简介 本项目是一套基于java swing和mysql实现的学生选课成绩信息管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。…

概念解析 | 无人机集群形状与轨迹建模: 集群舞蹈的艺术

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:无人机集群形状和轨迹建模 无人机集群形状与轨迹建模: 集群舞蹈的艺术 无人机集群的形状和轨迹建模可能听起来像是一部科幻小说的标题,但它实际上是现实中的一个重要研究领…

国内精选五大现货黄金价格实时查询软件最新名单(综合榜单)

随着金融市场的不断发展和投资者的日益增多&#xff0c;现货黄金价格实时查询软件成为了人们关注的焦点。投资者需要一款功能强大、操作简便、数据准确的软件来帮助他们获取实时的黄金价格信息&#xff0c;以便做出更加明智的投资决策。 本文将介绍国内精选五大现货黄金价格实…

iOS - 订阅型内购指南

一、App Store Connect 帮助 二、测试 三、订阅状态 四、问题思考 1、订阅归属&#xff1a; 以往的消耗性内购, 通常会生成订单ID对应到苹果的内购ID及用户id&#xff0c;对于我们来说&#xff0c;内购仅仅只是个支付工具&#xff0c;而订阅型内购有一整套销售模型订阅内购…

zabbix语言无法选择中文--zabbix安装配置中文

You are not able to choose some of the languages, because locales for them are not installed on the web server. 1、安装wget yum -y install wget 2、下载中文中文字体并配置 wget https://github.com/echohn/zabbix-zh_CN/archive/master.zip yum -y install unzip un…

4年经验来面试20K的测试岗,一问三不知,我还真不如去招应届生...

公司前段缺人&#xff0c;也面了不少测试&#xff0c;结果竟然没有一个合适的。一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资在10-20k&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。看简历很多都是4年工作经验&#xff0c;但面试…

恒运资本:A股三大指数是什么?A股三大指数怎么看?

炒股并不是盲目跟风&#xff0c;投资者自身要了解股票基本常识。例如指数反映的是股票商场上股票的变动状况&#xff0c;能够给我们的投资决策带来一定的依据。那么&#xff0c;A股三大指数是什么&#xff1f;A股三大指数怎么看&#xff1f;恒运资本为我们准备了相关内容&#…

如何给图片加水印?

如何给图片加水印&#xff1f;在我们的日常生活中&#xff0c;许多热爱摄影的朋友都会选择给自己的照片添加水印。这是因为我们深知&#xff0c;一张出色的照片背后需要付出大量的努力和心血&#xff0c;而通过添加水印可以有效地保护自己照片的版权&#xff0c;这样即使将图片…

MySQL概述,架构原理

一.MySQL简介 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典的MySQL AB公司开发&#xff0c;后被oracle公司收购&#xff0c;MySQL是当下最流行的关系型数据库管理系统之一&#xff0c;在WEB应用方面&#xff0c;MySQL是最好的RDBMS&#xff08;Relational Database Man…