算法 贪心3 || 1005. K 次取反后最大化的数组和 134. 加油站 135. 分发糖果

news2024/11/16 17:47:49

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

思路:给数组按照绝对值大小排序,优先将负数转成正数。如果此时 k % 2 == 1 。最后再将绝对值最小的值变成负数(该值可能原本是负数)
而不是直接从小到大排序。
例如-8,-5,-5,-3,-2,9这种序列。如果直接从小到大排序,那么最后一个变符号的就会是9,但其实让2变成-1更好。

class Solution {
public:
    static bool cmp(int a,int b){
        return abs(a) > abs(b);
    }
    int largestSumAfterKNegations(vector<int>& nums, int k) {
        sort(nums.begin(),nums.end(),cmp);
        for(int i = 0; i < nums.size(); ++i){
            if(nums[i] < 0 && k >0){
                nums[i] *= -1;
                k--;
            }
        }
        if(k%2 == 1) nums[nums.size()-1] *= -1;
        int sum = 0;
        for(int a : nums) sum += a;
        return sum;
    }
};

134. 加油站

如果总油量减去总消耗大于等于零那么一定可以跑完一圈,说明 各个站点的加油站 剩油量rest[i]相加一定是大于等于零的。

每个加油站的剩余量rest[i]为gas[i] - cost[i]。

i从0开始累加rest[i],和记为curSum,一旦curSum小于零,说明[0, i]区间都不能作为起始位置,因为这个区间选择任何一个位置作为起点,到i这里都会断油,那么起始位置从i+1算起,再从0计算curSum。
跟53. 最大子数组和很像

class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        deque<int> que;
        int sum = 0;
        for(int i = 0; i < gas.size(); i++){
            que.push_back(gas[i] - cost[i]);
            sum += gas[i] - cost[i];
        }
        if(sum < 0) return -1;
        sum = 0;
        int index = 0;
        for(int i = 0; i < gas.size(); i++){
            sum += que[i];
            if(sum < 0){
                sum = 0;
                index = i+1;
                continue;
            }
        }
        return index;
    }
};

135. 分发糖果

初始思路:
将元素放入map(从小到大排序)然后遍历分数数组去找对应的值,找到以后就判断左右,如果比中间值大,大的那个加一。但是这样的话时间复杂度就会到O(n2)。
卡哥思路:
先确定右边评分大于左边的情况(也就是从前向后遍历)
此时局部最优:只要右边评分比左边大,右边的孩子就多一个糖果,全局最优:相邻的孩子中,评分高的右孩子获得比左边孩子更多的糖果
在这里插入图片描述从前向后遍历,且被比较的是rating[i],i从1开始
每次比较都是:if(rating[i] > rating[i-1])。比如比较index0和index1的元素,可能改动的是index1。0是已经定好,不会再改动的。

但是!如果是比较右边元素!就不能从前向后遍历!
例如 5 4 3这组数据
比较index0和index1,此时会根据index1改变index0(本来分数5分数4的孩子都有一颗糖果,5>4,所以分数5再给一颗变成2)。但是比较index2和index1的时候,此时会根据index2改变index1(分数4的孩子有2两颗了)。index1被改变!
index1改变以后,index0就不一定有效了!(此时分数5和分数4都是两颗,没有做到分数5的比分数4的多一颗)

在这里插入图片描述

class Solution {
public:
    int candy(vector<int>& ratings) {
        vector<int> candy(ratings.size(),1);
        for(int i = 1; i< ratings.size();++i){
            if(ratings[i] > ratings[i-1]) candy[i] = candy[i-1] + 1;
        }
        for(int j = ratings.size()-2; j>=0; --j){
            if(ratings[j] > ratings[j+1]){
                candy[j] = max(candy[j],candy[j+1]+1);
            }
        }
        int sum = 0;
        for(int a : candy) sum += a;
        return sum;
    }
};

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

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

相关文章

Zebec Protocol 出席香港 Web3 峰会,带来了哪些信息?

梳理香港加密新政的细节&#xff0c;一个明确的脉络是&#xff0c;香港加密新政的整体目的是令虚拟资产交易明确化和合法化&#xff0c;通过不断完善的监管框架&#xff0c;促进香港虚拟资产行业的可持续和负责任地发展。 在加强合规和持牌经营的监管思路下&#xff0c;长期审…

JavaScript|JS修仙篇|一本就够了|笔记|(超详细|保姆级)

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;老茶icon &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开兴好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;计…

common markdown命令大全,控制文章格式

直接上教程 提到Markdown&#xff0c;很多人首先想到的是简单、Easy等等。的确&#xff0c;Markdown为简单而生。Markdown是由一个叫 JOHN GRUBER 的哥们发明的&#xff0c;它的语法用一篇文章就可以说完。不相信吗&#xff1f;让我们来试试看... 基础语法 标题 Markdown支持6…

搭建windows下基于VSCode的C++编译和调试环境

VSCode是目前比较流行的IDE&#xff0c;因为它插件丰富&#xff0c;依据需求扩展&#xff0c;非常方便。 本文记录搭建windows下基于VSCode的C编译和调试环境的过程。 网上关于此问题的帖子比较多&#xff0c;找了好几个也没有试验成功&#xff0c;最后发现还是按照VScode的官方…

揭秘阿里新大招:大模型只是前菜

技术的代际变革往往对商业格局产生深远影响。眼下&#xff0c;随着产业各界对大模型的投入布局加深&#xff0c;一个业界共识逐渐诞生&#xff1a;大模型正在改变云生态&#xff0c;将为云计算行业带来新的奇点。 在过去的一段时间里&#xff0c;市场研究机构IDC在2022年底的预…

Unity和Visual studio开发调试环境配置-工具插件安装和配置

在Unity开发中&#xff0c;常用C#脚本进行功能开发&#xff0c;需要用到Visual Studio进行开发和调试&#xff0c;需要分别在Unity3d和Visual Studio中安装插件和工具才能更好的进行开发和调试。 visual studio安装Unity扩展工具 visual studio中“工具”→“获取工具和功能”…

Leetcode.1019 链表中的下一个更大节点

题目链接 Leetcode.1019 链表中的下一个更大节点 Rating &#xff1a; 1571 题目描述 给定一个长度为 n 的链表 head 对于列表中的每个节点&#xff0c;查找下一个 更大节点 的值。也就是说&#xff0c;对于每个节点&#xff0c;找到它旁边的第一个节点的值&#xff0c;这个节…

[Python工匠]输出②数值与字符串

2.1 基础知识 2.1.1 数值基础 在Python中&#xff0c;一共存在三种内置数值类型&#xff1a;整型&#xff08;int&#xff09;、浮点型&#xff08;float&#xff09;和复数类型&#xff08;complex&#xff09;。 在大多数情况下&#xff0c;我们只需要用到前两种类型&#x…

SAR ADC系列23:异步SAR逻辑

异步sar逻辑的引入&#xff1a; 原因1&#xff1a;提高转换速度 ■ 同步时钟从第一个比较周期到最后一个比较周期长度都是相等的。对于Latch比较器&#xff0c;信号幅度越小&#xff0c;比较时间越长&#xff08;参考latch时域响应那一节&#xff09;。为了保证比较器…

Linux串口出厂测试工具与使用说明

1、说明 本文针对Linux系统上如何对各类串口硬件进行出厂测试进行硬件连接和软件使用说明&#xff0c;提供的软件测试工具wchsertest&#xff0c;适用于USB、PCI、PCIe转串口设备等、同样也适用于原生ttyS串口。 2、串口测试硬件连接 在测试前&#xff0c;需要制作单独的硬件…

寸照换底色技巧大全,超详细图文教程

在日常的设计工作中&#xff0c;我们常常需要将图片的背景色进行修改&#xff0c;以适应不同的场景和需求。其中最常用的方法就是寸照换底色技巧。本文将为大家介绍一些常见的寸照换底色技巧&#xff0c;并提供超详细的图文教程&#xff0c;帮助大家轻松完成这项任务。 一、使…

2023最新面试题-Java-6

1. Date API Java 8 在包java.time下包含了一组全新的时间日期API。新的日期API和开源的Joda-Time库差不多&#xff0c;但 又不完全一样&#xff0c;下面的例子展示了这组新API里最重要的一些部分&#xff1a; Clock类提供了访问当前日期和时间的方法&#xff0c;Clock是时区敏…

springboot加载命令行参数ApplicationArguments

往期文章 springcloud整合knike4j聚合微服务接口文档 spring源码 - 条件注解ConditionnalOnClass的原理分析 springboot项目实现导出pdf功能&#xff0c;这也太简单了吧 目录 文章目录往期文章目录一、介绍二、通过应用程序参数获取配置1. 通过bean获取应用程序参数2. 通过V…

在外web浏览器远程访问jupyter notebook服务器

文章目录前言视频教程1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口5. 固定公网地址转载自远控源码文章&#xff1a;公网远程访问jupyter notebook【cpolar内网穿透】 前言 Jupyter Notebook&#…

我现在必须new一个对象!!!

目录 前言 1.new 2.delete 3.底层逻辑 4.定位new 5.对比 前言 &#x1f383;之前在使用C语言的时候&#xff0c;我们便使用 malloc 和 calloc 等函数进行动态内存的开辟。但 C 之中又引入了两个操作符 new 和 delete 来代替C语言中的函数进行动态内存的管理。下面就一起…

苏州源特VPT87DDF01B 隔离变压器 小体积/SMD/3000VDC 隔离

1 产品特点  小体积隔离变压器  隔离电压 3000VDC  工作温度&#xff1a;-40~125℃&#xff08;包含产品温升&#xff09;  存储温度&#xff1a;-55~125℃  SMD 表贴安装  回流焊温度&#xff1a;峰值温度≤250℃&#xff08;10s&#xff09;  回流焊次数&#…

Softing新版HART多路复用器软件支持西门子控制器

用于访问配置和诊断数据的HART多路复用器软件——Softing smartLink SW-HT&#xff0c;现在支持西门子的ET200远程IO和FDT/DTM接口。 smartLink SW-HT是一个基于Docker容器的软件应用。通过该软件&#xff0c;用户可以快速地访问以太网远程IO的HART设备&#xff0c;并且无需额外…

【Linux】进程间通信之管道(pipe)

文章目录前言为什么要进程间通信进程间通信的理论依据管道管道的原理创建匿名管道管道的特点管道的场景利用管道控制子进程命名管道命名管道的打开规则命名管道和匿名管道的区别用命名管道实现server和client通信前言 大家好久不见&#xff0c;今天开始我们将进入进程间通信章…

redis高可用方案:主从复制+哨兵模式,经典案例:一主二从三哨兵,及springboot集成配置

Redis高可用方案&#xff1a;主从复制哨兵模式 经典案例&#xff1a;一主二从三哨兵&#xff0c;及springboot集成配置 第一.配置 1.主节点配置&#xff08;redis.conf&#xff09; # 主节点配置 仅展示必要配置 redis.conf # 保护模式设置为关&#xff0c;方便其他节点访问…

推荐几款炫酷的 MySQL 可视化管理工具!好用到爆!!

MySQL 的管理维护工具非常多&#xff0c;除了系统自带的命令行管理工具之外&#xff0c;还有许多其他的图形化管理工具&#xff0c;工具好用是一方面&#xff0c;个人的使用习惯也很重要&#xff0c;这里介绍 13 款 MySQL 图形化管理工具&#xff0c;供大家参考。 1&#xff1a…