二刷代码随想录算法训练营第三十四天 | 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果

目录

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

二、134. 加油站

三、135. 分发糖果


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

题目链接:力扣

文章讲解:代码随想录

视频讲解:

题目:

给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:

选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。
重复这个过程恰好 k 次。可以多次选择同一个下标 i 。

以这种方式修改数组后,返回数组 可能的最大和 。

代码:

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

时间复杂度: O(n+c)                                                  空间复杂度:O(c)

⏲:9:19

总结:取负:局部最优:最大的负数先取负转变k次正负:局部最优:最小的数。

二、134. 加油站

题目链接:134. 加油站 - 力扣(LeetCode)

文章讲解:代码随想录 (programmercarl.com)

视频讲解:

题目:在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。
你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。
给定两个整数数组 gas 和 cost ,如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1 。如果存在解,则 保证 它是 唯一 的。代码:
class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int sum = 0;int total = 0;int position = 0;int flag = 0;for (int i = 0; i < gas.size(); i++){sum += gas[i] - cost[i];total += gas[i] - cost[i];if(sum < 0){sum = 0;position = i+1;}}  if(total<0) return -1;return position;}
};

时间复杂度: O(n)                                                  空间复杂度O(1)

⏲:25:07

总结:局部最优:当sum<0则合理位置至少i+1,i+1之前都不行。本质:如果总数为正,则应该正大于负,局部来看,若前面的和为负数,则后面的和应为正数。

三、135. 分发糖果

题目链接:135. 分发糖果 - 力扣(LeetCode)

文章讲解:代码随想录 (programmercarl.com)

视频讲解:

题目:n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。
你需要按照以下要求,给这些孩子分发糖果:
每个孩子至少分配到 1 个糖果。
相邻两个孩子评分更高的孩子会获得更多的糖果。
请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。代码:
class Solution {
public:int candy(vector<int>& ratings) {vector<int> candyvec(ratings.size(), 1);for (int i = 1; i < ratings.size(); i++)//从左到右if (ratings[i] > ratings[i-1]) candyvec[i]= candyvec[i-1] + 1;for (int i = ratings.size()-2; i >= 0; i--)//从右到左if (ratings[i] > ratings[i+1]) candyvec[i] = max(candyvec[i], candyvec[i+1] + 1);int ans = 0;for (int &i : candyvec)ans += i;return ans;}
};class Solution {
public:int candy(vector<int>& ratings) {vector<int> left(ratings.size(), 1);vector<int> right(ratings.size(), 1);for(int i = 1, j = ratings.size()-2; i < ratings.size(); j--, i++){if(ratings[i] > ratings[i-1]) left[i] = left[i-1]+1;if(ratings[j] > ratings[j+1]) right[j] = right[j+1]+1;} int sum = 0;for(int i = 0; i < ratings.size(); i++){sum += max(left[i], right[i]);}return sum;}
};

时间复杂度: O(n)                                                  空间复杂度O(1)

⏲:4:38

总结:重点:两边同时比较会顾此失彼。注意点:右与左比较时只能正向遍历,反向遍历会错失评分连续增长的情况(总之就是两个方向各来一遍)。

        ps:多个维度考虑时,一般先考虑一个维度,再考虑另外一个维度。

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

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

相关文章

【MATLAB源码-第15期】基于matlab的MSK的理论误码率与实际误码率BER对比仿真,采用差分编码和IQ调制解调。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 在数字调制中&#xff0c;最小频移键控&#xff08;Minimum-Shift Keying&#xff0c;缩写&#xff1a;MSK&#xff09;是一种连续相位调制的频移键控方式&#xff0c;在1950年代末和1960年代产生。[1] 与偏移四相相移键控&a…

在虚拟机CentOs_7_64环境中安装Docker和Docker-Compose

参考 在虚拟机环境中安装Docker和Docker-Compose

“数字化”持续走热,VR全景助力制造业上“云”

制造业要升级&#xff0c;数字化改造是重要途径。 早年间&#xff0c;由于对数字化的认识不足&#xff0c;一些企业明明有数字化改造需求&#xff0c;却不敢、不愿、不会上“云”。直到此次两会期间&#xff0c;2024年政府工作报告再次提出推动制造业数字化转型&#xff0c;越…

网络——套接字编程TCP

目录 服务端 创建套接字&#xff08;socket&#xff09; 服务端绑定&#xff08;bind&#xff09; 服务端监听&#xff08;listen&#xff09; 服务器接收&#xff08;accept&#xff09; 服务端处理&#xff08;read & write&#xff09; 客户端 创建套接字&#…

CVE-2022-33891 Apache Spark shell 命令注入漏洞分析

漏洞简介 Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架 Spark&#xff0c;拥有Hadoop MapReduce所具有的优点&#xff1b;但不同于MapReduce的…

鸿蒙OS开发实例:【demo选择列表限定数量】

效果图&#xff1a; 示例代码 // 使用 DevEco Studio 3.1.1 Release 及以上版本&#xff0c;API 版本为 api 9 及以上。 // 主要功能及注意事项&#xff1a; // 该组件展示了一个乘客选择列表。列表中的每个项目包含一个复选框和对应的乘客姓名&#xff0c; // 用户点击任意一…

蓝桥杯2019年第十三届省赛真题-数列求值

一、题目 数列求值 【问题描述】 给定数列 1, 1, 1, 3, 5, 9, 17, …&#xff0c;从第 4 项开始&#xff0c;每项都是前 3 项的和。求第 20190324 项的最后 4 位数字。 【答案提交】 这是一道结果填空的题&#xff0c;你只需要算出结果后提交即可。本题的结果为一个 4 位整数&a…

MATLAB 自定义生成圆柱点云(49)

MATLAB 自定义生成圆柱点云(49) 一、算法介绍二、具体实现1.代码2.效果一、算法介绍 按照一些提前指定的圆柱参数,自定义生成圆柱点云,可添加噪声,用于后续的实验测试 二、具体实现 1.代码 代码如下(示例): % 指定圆柱的参数 radius = 5; % 圆柱半径 height = 20…

【Spring源码】Bean采用什么数据结构进行存储

一、前瞻 经过上篇源码阅读博客的实践&#xff0c;发现按模块阅读也能获得不少收获&#xff0c;而且能更加系统地阅读源码。 今天的阅读方式还是按模块阅读的方式&#xff0c;以下是Spring各个模块的组成。 那今天就挑Beans这个模块来阅读&#xff0c;先思考下本次阅读的阅读…

Jmeter脚本优化——随机函数

线程组下有 2 个请求的参数中均使用到相同的参数&#xff0c;在进行参数化时&#xff0c;想 要每个请求使用不同的取值。 &#xff08; 1 &#xff09; 线程组设置如下 &#xff08; 2 &#xff09; 线程组下添加加购物车请求&#xff0c;请求传参包含商品 id &#xff08;…

前端日期组件layui使用,月模式

初学前端&#xff0c;实战总结 概要 有一个日期组件&#xff0c;我的谷歌浏览器选完日期后&#xff0c;偶尔获取不到最新数据&#xff0c;有一个客户&#xff0c;是经常出不来数据。 日期组件是Wdate&#xff1a;调用的方法是WdatePicker onpicking&#xff0c;代码片段如下…

基于AT89C51单片机的智能交通灯设计

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/89035863?spm1001.2014.3001.5503 1绪 论 1.1课题研究背景 交通是城市经济活动的命脉&#xff0c;对城市经济发展、人民生活水平的提高起着十分重要的作用。城市交…

302.【华为OD机试】叠积木(贪心算法—JavaPythonC++JS实现)

本文收录于专栏:算法之翼 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-叠积木二.解题思路三.题解代码Python题解代码JAVA题解代码C/C++题解代码JS题解代码四.代码…

干货分享DS5L1伺服电机通过倍讯科技485转 Profinet 网关与西门子PLC进行通信的配置方法

倍讯科技485转 ProfinetDS5L1 伺服电机与 Profinet 网关进行通信需要了解 Profinet 协议和伺服电机的具体通信要求。以下是您可以如何解决此问题的总体概述&#xff1a; 了解 Profinet&#xff1a;Profinet 是自动化工业以太网标准。您需要了解 Profinet 的工作原理、其寻址方案…

纳斯达克大屏:媒体尺寸及投放费用详解

纳斯达克大屏媒体尺寸及投放费用详解 纳斯达克图片要求 像素 纳斯达克大屏媒体图片的像素要求为2336 H x 1832 W (pixels)。确保你的图片符合这一尺寸要求&#xff0c;以确保在大屏上的显示效果最佳。 分辨率 分辨率要求为(1.0) px 72 dpi。这意味着每个像素显示为一个实…

Java 加载外部 Jar 中的类并通过反射调用类中的方法

目录 问题 类加载器 获取外部 jar 包中的类以及方法 调用外部 jar 包中的方法 问题 工作中遇到一个需求&#xff0c;客户端将第三方的 jar 包上传到服务器中&#xff0c;系统需要解析出上传的 jar 中所有类以及类下的方法&#xff08;方法名&#xff0c;方法输入参数类型&…

Spire.PDF for .NET【文档操作】演示:查找并删除 PDF 中的空白页

PDF 中的空白页并不罕见&#xff0c;因为它们可能是作者故意留下的或在操作文档时意外添加的。当您阅读或打印文档时&#xff0c;这些空白页可能会很烦人&#xff0c;因此可能非常有必要将其删除。在本文中&#xff0c;您将了解如何使用Spire.PDF for .NET以编程方式查找和删除…

亲测有效Djiango连接oracle

navicat连接本地oracle截图。 Djiango下面settings.py下面的DATABASES&#xff1a; 注意&#xff1a;USER最好不要用sys或者system可能会导致连接不了&#xff0c;最好是自己新建的oracle用户。

Aapche Nutch建立自己的搜索引擎

sudo apt install default-jdk‘ java -version openjdk version "11.0.22" 2024-01-16 vi .bashrc export JAVA_HOME/usr/lib/jvm/java-11-openjdk-amd64 爬梯子下载源代码 Apache Nutch™ – Downloads mkdir -p urls cd urls touch seed.txt 里面放入我的网站…

Redis是单线程还是多线程

之前面试又被问到这个问题&#xff0c;一直以为Redis是单线程&#xff0c;直到面试官的指点&#xff0c;才发现这么说有误&#xff0c;于是查了很多资料&#xff0c;下面简单聊聊Redis是单线程还是多线程&#xff1f; 单线程数据操作 首先需要理清一个基本概念&#xff1a;所…