算法训练营36

题目1:

根据通过情况反复挑战最终AC过了,这里和原来的差别是他的排序是用绝对值排序的,这样的思路会很简单

class Solution {
public:int largestSumAfterKNegations(vector<int>& nums, int k) {sort(nums.begin(), nums.end());int i;for(i = 0;i < nums.size();i++) {// 这里就是排完序之后如果是负数就给他变成整的if(nums[i] < 0) {nums[i] = -nums[i];k--;}else if(nums[i] == 0) {// 如果遇到0 其实省的K次反转直接用到0这里就行break;}else {// 反转完负的没有遇到0 这里就要根据剩余的K判断了// 如果K能整除2 那就正的还是正的,否则就要判断原来数组里最小的正数// 和负数取反后的正数谁小,谁小就对其去负数if(k % 2 != 0) {if(i > 0 && nums[i] > nums[i - 1]) nums[i - 1] = - nums[i - 1];else nums[i] = - nums[i];}break;}// 这里是k < 数组个数的情况直接, k次数完了就breakif(k == 0) break;}// 如果K 大于 数组个数  就是根据剩余K 来判断是否对最小的正数反转if(k != 0 && i == nums.size()) {sort(nums.begin(), nums.end());if(k % 2 != 0) nums[0]  = -nums[0];}int sum = 0;for(int j =0;j < nums.size();j++)  {sum += nums[j];}return sum;}
};

这里要注意要先变绝对值大的负数 

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] = -nums[i];k--;}}if(k % 2 != 0) nums[nums.size()  - 1] = -nums[nums.size() - 1];int sum = 0;for(int i = 0;i < nums.size();i++) {sum += nums[i];}return sum;}
};

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

代码随想录上的思路,让加油 - 耗油,如果所有的总和都<0 那肯定跑不完,然后用一个currsum 统计从 0 开始到当前i 的 剩余油之和,如果 < 0 说明 起始位置肯定在为 i + 1,然后currsum 置零,在重复上面操作,最后返回 start 就行。

class Solution {
public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int currsum = 0;int totalsum = 0;int start = 0;for(int i = 0;i < gas.size();i++) {currsum += gas[i] - cost[i];totalsum += gas[i] - cost[i];if(currsum < 0) {start = i + 1;currsum = 0;}}if(totalsum < 0) return -1;return start;}
};

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

这道题从两边开始算就好,先从左向右只考虑右边小孩比左边小孩大,然后从右向左考虑,最后取两次糖果数组里大的,然后最后求和即可

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

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

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

相关文章

数据通信基本概念汇总

1. 数据通信基础 网关: 提供协议转换&#xff0c;路由选择&#xff0c;数据交换的网络设备 报文: 网络中所传递的一个数据单元。 数据载荷: 最终要传递的信息 封装: 给数据载荷添加头部和尾部的过程(形成新的报文) 解封装: 给数据载荷去掉头部和尾部的过程(获取数据载荷) 终端设…

C语言中的位段

位段是通过结构体实现的&#xff0c;可以在一定程度上减小空间浪费&#xff0c;位段的声明和结构体类似&#xff0c;有以下几个不同&#xff1a; ①位段的成员必须是整形&#xff08;int,char,short等&#xff09;。 ②成员后边有冒号和数字&#xff0c;表示该成员占几个bit位…

LeetCode---栈与队列

232. 用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int pee…

深入理解Java面向对象设计的六大原则

目录 单一职责原则&#xff08;SRP&#xff09; 开放封闭原则&#xff08;OCP&#xff09; 里氏替换原则&#xff08;LSP&#xff09; 依赖倒置原则&#xff08;DIP&#xff09; 接口隔离原则&#xff08;ISP&#xff09; 迪米特法则&#xff08;LoD&#xff09; 结语 …

Mac快速搭建前端环境创建前端项目【Vue】

Mac快速搭建前端环境&创建前端项目 官网&#xff1a; vue&#xff1a;https://cn.vuejs.org/vue-router&#xff1a;https://www.axios-http.cn/pinia&#xff1a;https://pinia.vuejs.org/zh/getting-started.htmlaxios&#xff1a;https://www.axios-http.cn/ant-design&…

Advanced Installer 问题集锦

1、界面在主题中显示的图标&#xff0c;如logo、发布者名称、产品名称就算在设计界面时删除&#xff0c;但是下次打开工程依然存在 解决办法&#xff1a;“可见”属性设置为禁用 2、在不关闭软件的情况下&#xff0c;使用"文件->打开"来切换项目&#xff0c;再次…

c++按索引同时删除多个元素

文章目录 代码结果 这个时候不能从前往后删&#xff0c;因为会破坏後面的元素的索引值&#xff0c;比如如果第删除了第2个元素&#xff0c;第3个元素的索引就会变为第2个元素的索引&#xff0c;造成混乱&#xff0c;甚至引起程序崩溃。应该从後往前删。 代码 #include<iost…

学习笔记——数据通信基础——数据通信网络(基本概念)

数据通信网络基本概念 网络通信&#xff1a;是指终端设备之间通过计算机网络进行的通信。 数据通信网络(Data Communication Network)&#xff1a;由 路由器、交换机、防火墙、无线控制器、无线接入点&#xff0c;以及个人电脑、网络打印机&#xff0c;服务器等设备构成的通信…

软考 系统架构设计师系列知识点之杂项集萃(21)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;20&#xff09; 第30题 软件结构化设计包括&#xff08; &#xff09;等任务。 A. 架构设计、数据设计、过程设计、原型设计 B. 架构设计、过程设计、程序设计、原型设计 C. 数据设计、过程设…

探秘GPT-4o:人工智能语言模型的新纪元

目录 前言1 GPT系列版本演变1.1 GPT-1到GPT-3的演变1.2 GPT-4的引入 2 GPT-4o与GPT-4的区别2.1 参数规模和架构优化2.2 训练数据和方法改进2.3 多模态能力 3 GPT-4o在语言生成和理解方面的技术能力3.1 更自然的语言生成3.2 更深刻的语境理解3.3 强大的跨语言能力3.4 自适应学习…

服务器硬件基础知识全面解析

在信息技术领域&#xff0c;服务器作为支撑各类业务运行的基石&#xff0c;其稳定性和性能至关重要。服务器硬件作为服务器的核心组成部分&#xff0c;直接决定了其处理能力、可靠性和扩展性。本文将深入浅出地介绍服务器硬件的基础知识&#xff0c;帮助IT专业人士及对服务器技…

git都在自己的个人分支开发吗?功能分支和个人分支工作流

在实际的开发过程中&#xff0c;使用分支的策略可以根据项目的需求和团队的工作流程进行调整。以下是两种常见的分支策略&#xff1a; 1. 功能分支&#xff08;Feature Branches&#xff09; 每个功能或修复一个独立的分支。这种方法通常被称为“功能分支工作流”。 优点 隔…

如何通过手机自学编程入门:探索四、五、六、七方面的学习路径

如何通过手机自学编程入门&#xff1a;探索四、五、六、七方面的学习路径 在信息爆炸的时代&#xff0c;手机已不仅仅是通讯工具&#xff0c;更是知识的宝库和学习的利器。对于渴望入门编程的初学者来说&#xff0c;手机自学编程成为了一种便捷而高效的选择。本文将围绕四个方…

【Unity Shader入门精要 第11章】让画面动起来(一)

1. Unity Shader中的时间变量 Shader控制这物体的显示&#xff0c;当向Shader中引入时间变量后&#xff0c;就可以让物体的显示效果随时间发生变化&#xff0c;以实现动画效果。 Unity中常见的时间变量如下表&#xff1a; 变量类型描述_Timefloat4(t/20, t, 2t, 3t)&#xf…

gulp入门5:registry

在 Gulp 的上下文中&#xff0c;registry 通常不直接指代一个常规用户需要使用的功能&#xff0c;因为它更多地与 Gulp 的内部任务注册和管理机制相关。然而&#xff0c;Gulp 允许通过其插件系统来扩展和自定义任务注册表的行为。以下是一个关于 Gulp 中 registry 的深入教程&a…

## 揭开疾病预测的神秘面纱:面向医疗专业人士的sklearn逻辑回归逐步指南

引言 在当今数据驱动的医疗保健领域&#xff0c;机器学习已成为从患者数据中提取见解并做出明智决策的强大工具。在众多机器学习算法中&#xff0c;逻辑回归以其简单性、可解释性和解决分类问题的有效性脱颖而出。在本综合指南中&#xff0c;我们将深入研究逻辑回归的世界&…

打造高可用系统:深入了解心跳检测机制

本文作者:小米,一个热爱技术分享的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! Hello,大家好!我是你们的技术小伙伴小米,今天咱们来聊聊分布式系统中的“心跳检测”机制。心跳检测是一种简单而又重要的机制,用来监控系统的…

如何实现虚拟列表?定高和不定高两种场景

之前我写了一篇文章&#xff1a;如何使用 IntersectionObserver API 来实现数据的懒加载 在文章的最后&#xff0c;我们提到如果加载的列表数据越来越多&#xff0c;我们不可能把所有的数据都渲染出来&#xff0c;因为这样会导致页面卡住甚至崩溃。 为了优化这种长列表场景&am…

WebPack插件实现:打包之后自动混淆加密JS文件

在WebPack中调用JShaman&#xff0c;实现对编译打包生成的JS文件混淆加密 一、插件实现 1、插件JShamanObfuscatorPlugin.js&#xff0c;代码&#xff1a; class JShamanObfuscatorPlugin { apply(compiler) { compiler.hooks.emit.tapAsync(JShamanObfuscatorPlugin, (comp…

超级好用的C++实用库之跨平台实用方法

&#x1f4a1; 需要该C实用库源码的大佬们&#xff0c;可搜索微信公众号“希望睿智”。添加关注后&#xff0c;输入消息“超级好用的C实用库”&#xff0c;即可获得源码的下载链接。 概述 C跨平台开发时&#xff0c;我们经常会遇到一系列挑战和问题。这些问题主要源自不同操作…