【力扣刷题 | 第十八天】

news2024/10/7 16:27:30

目录

前言:

1005. K 次取反后最大化的数组和 - 力扣(LeetCode)

 134. 加油站 - 力扣(LeetCode)

 总结:


前言:

                今天随机刷题,不对题型做具体的要求

1005. K 次取反后最大化的数组和 - 力扣(LeetCode)

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

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

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

解题思路:要想最终的得到的数组和最大,我们就不要想的太复杂,很多人会想:

  • 1.k值足够所有的负数取正,并且有剩余,此时全部数都是正的,那么我们想要得到最大值就不断给最小值取反就可以了,直到K值用光。这也就可以得到所有的负数和。
  • 2.K值不够所有的负数取反,那么我们只需要让所有更小的负数取反就好了(更小的负数取反之后结果更大),这也就可以得到最大的数组元素和。
  • 3.如果数组中根本就没有负数,那么就属于我们情况1的子情况,给都是正数的集合取反求最大值,只需要一直用最小的值取反就好了

很多人思考到这里就没有继续思考了,导致写出来的代码太过于繁杂,情况判断复杂,但我们可以提炼这三种情况,实际上就是一直不断的给整个数组中最小的值取反

当有负数的时候,给最小的值(负数)取反实际就是为了得到较大正数,我们再每一次取反之后都排序,确保第一位始终都是最小的数字。

当没有负数的时候,我们就一直对第一位进行取反排序,这一过程始终操作的都是最小数。

也就是说整个题就是一个贪心思路解法:如果想要得到数组元素之和最大值,就要一直对数组的最小值进行取反,当最小值是负数的时候,我们给最小值取反相当于尽可能的获取最大负数取反值,当最小值是整数的时候,就尽可能保证这个数字取反之后成为负数对元素和的最大值影响最小。

解法1:

class Solution {
public:
    int largestSumAfterKNegations(vector<int>& nums, int k) {
          for(int i=0;i<k;i++)
          {
              sort(nums.begin(),nums.end());
              nums[0]=-nums[0];
          }
          int sum=0;
          for(int a :nums)
          {
              sum=sum+a;
          }
            return sum;
    }
};

 134. 加油站 - 力扣(LeetCode)

在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。

你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。

给定两个整数数组 gas 和 cost ,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1 。如果存在解,则 保证 它是 唯一 的。

其实本题我们也可以用贪心算法的思路来做,也就是说:每一个站都有自己的增油量和耗油量,如果说每一个站的耗油量和增油量做差下来的值总和小于0,那么肯定是无法完成整个环的,如果是大于0,我们对这个数组进行遍历,寻找从哪里加起来不会让值总和小于等于0就可以了

解得: 

class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
         int n = gas.size();
         int start = 0;
         int total = 0;//起点开始到当前加油站的总汽油量减去总消耗量。
         int tank = 0;//剩余油量

    for (int i = 0; i < n; i++) {
        tank += gas[i] - cost[i];
        total += gas[i] - cost[i];

        if (tank < 0) {
            start = i + 1;
            tank = 0;
        }
    }

    return total >= 0 ? start : -1;
    }
};

 总结:

        今天刷了两道贪心算法的题目,收获很大。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

 

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

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

相关文章

Spring5学习笔记--Maven

Spring5学习笔记--Maven Maven高级1 分模块开发1.1 分模块开发设计1.2 分模块开发实现1.2.1 环境准备1.2.2 抽取domain层步骤1:创建新模块步骤2:项目中创建domain包步骤3:删除原项目中的domain包步骤4:建立依赖关系步骤5:编译maven_02_ssm项目步骤6:将项目安装本地仓库 1.2.3 抽…

揭秘GPT-4;Adobe Firefly AI 扩大测试规模

&#x1f989; AI新闻 &#x1f680; Adobe Firefly AI 扩大测试规模&#xff0c;支持100多种语言的输入 摘要&#xff1a;Adobe宣布扩大测试规模&#xff0c;Adobe Firefly AI现在支持100多种语言的 prompts 输入。网页测试版Firefly已经扩充了罗马尼亚语等多种语言&#xf…

layui选项卡演示

layui选项卡演示 .1 引入layui2. 选项卡演示实列3.js分离的代码4运行结果 在前端开发中&#xff0c;选项卡常用于展示多个内容模块&#xff0c;提供用户友好的界面交互方式。layui作为一款简洁易用的前端框架&#xff0c;提供了丰富的组件库&#xff0c;其中包括了强大且易用的…

Html基础知识学习——css精灵

这里写自定义目录标题 定义示例一示例二 定义 将网页用到的图片放在一张图片上&#xff0c;进行定位展示 优点:防止网页http请求次数过多&#xff0c;从而提高页面性能 缺点&#xff1a;降低开发效率。维护难度加大 示例一 使用图 网页制作图 <!DOCTYPE html> <…

AcWing 1273. 天才的记忆—RMQ

题目链接: AcWing 1273. 天才的记忆 问题描述 RMQ是用来求解静态区间最大/小值的算法&#xff0c;静态空间就是数组里的数不会变&#xff0c;动态空间最大/小值可以用线段树或者树状数组来求解。 RMQ算法有点类似与区间DP&#xff0c;RMQ算法的时间复杂度为 O ( n l o g n ) …

三菱 FX三菱PLC以太网通信程序

捷米特三菱FX转以太网通讯处理器是一款经济型的以太网通讯处理器&#xff0c;是为满足日益增多的工厂设备信息化需求&#xff08;设备网络监控和生产管理&#xff09;而设计&#xff0c;用于三菱FX1S/1N/2N/3S/3G/3GA/3GC/3U/3UC系列、汇川、士林AX、禾川、维控等PLC以太网数据…

【算法和数据结构】347、LeetCode前 K 个高频元素

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;首先我们使用一个哈希表记录每个元素出现的频率。再设置一个优先队列&#xff0c;并将数组中元素出现的…

C语言实现扫雷【经典】

前言   本篇文章要实现的是扫雷游戏&#xff0c;其代码实现与上一篇的三子棋游戏类同&#xff0c;都是在棋盘的基础上&#xff0c;与电脑进行对抗&#xff0c;不同的是&#xff0c;扫雷游戏一开始电脑就已经随机布置好了所有“雷”。 请戳 --->三子棋 扫雷游戏 1. 扫雷游…

【Visual Studio】VTK 显示小球例子,在 Windows 上使用 Visual Studio 配合 Qt 构建 VTK

知识不是单独的&#xff0c;一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏&#xff1a;Visual Studio。 关于更多此例子的资料&#xff0c;可以参考&#xff1a;【Visual Studio】在 Windows 上使用 Visual Studio 配合 Qt 构建 VTK。 文章目录 版本环境VTKTest.…

Nginx upstream 负载均衡配置

[toc] ## 问题: 自7/4 以来, 所有设备同时出现 Network Error, 导致业务无法正常进行, 频率 3次/每分钟; ## 现场情况及原因分析: 3楼: 8条产线 4楼: 20条产线 5楼: 5条产线 点数: 33条线 * 平均 (5台工位 1台电视看板 3台测试仪 ) ≈ 300 - Nginx 日志占用: access 日志 …

【MySQL备份与还原、索引、视图】练习

一、备份与还原 /***************************样例表***************************/CREATE DATABASE booksDB;use booksDB;CREATE TABLE books(bk_id INT NOT NULL PRIMARY KEY,bk_title VARCHAR(50) NOT NULL,copyright YEAR NOT NULL);INSERT INTO booksVALUES (11078, Lear…

UNIX网络编程卷一 学习笔记 第二十三章 高级SCTP套接字编程

SCTP是一个面向消息的协议&#xff0c;递送给用户的是部分的或完整的消息。只有当发送大消息时&#xff0c;在对端才会递送部分的消息。部分消息被递送给应用后&#xff0c;多个部分消息组合成单个完整消息不由SCTP负责。在SCTP应用进程看来&#xff0c;一个消息既可由单个输入…

线性代数的一些小细节

1 .矩阵的满足结合律&#xff0c;但不满足交换律 验证和证明如下图&#xff1a; 如下&#xff0c;UWQ三个矩阵的2种结合&#xff0c;证明矩阵乘法满足结合律 下图中&#xff0c;AB 和BA的值可能是不同的&#xff08;相同的条件是图中相互对应的4项相同&#xff0c;即对称矩阵…

防范 XSS 攻击的措施

防范 XSS 攻击的措施 XSS&#xff08;Cross-site scripting&#xff09;攻击是一种常见的网络安全漏洞&#xff0c;它可以通过注入恶意代码来攻击用户的计算机和浏览器&#xff0c;从而窃取用户的敏感信息或执行恶意操作。本篇文章将介绍防范 XSS 攻击的措施&#xff0c;并提供…

Spring设计模式及部分技术讲解

讲师:邓澎波 Spring面试专题 1.Spring应该很熟悉吧?来介绍下你的Spring的理解 有些同学可能会抢答,不熟悉!!! 好了,不开玩笑,面对这个问题我们应该怎么来回答呢?我们给大家梳理这个几个维度来回答 1.1 Spring的发展历程 先介绍Spring是怎么来的,发展中有哪些核心的节…

Linux文件

目录 系统级I/O 简介 接口 文件描述符fd 重定向 缓冲区 文件系统 软硬链接 动静态库 静态函数库 动态库 系统级I/O 简介 输入/输出&#xff08;I/O&#xff09;是在主存和外部设备&#xff08;磁盘驱动器、终端和网络&#xff09;之间复制数据的过程。输入操作是…

opencv-04 像素处理

opencv-04 像素处理 在 OpenCV 中&#xff0c;最小的数据类型是无符号的 8 位数。因此&#xff0c;在 OpenCV 中&#xff0c;实际上并没有二值图像这种数据类型&#xff0c;二值图像经常是通过处理得到的&#xff0c;然后使用0表示黑色&#xff0c;使用 255 表示白色。 可以将…

【基本算法】三分法模板

洛谷三分法https://www.luogu.com.cn/problem/P3382 题目描述 如题&#xff0c;给出一个 N 次函数&#xff0c;保证在范围 [l,r] 内存在一点 x&#xff0c;使得 [l,x] 上单调增&#xff0c;[x,r] 上单调减。试求出 x 的值。 输入格式 第一行一次包含一个正整数 N 和两个实数…

吐血整理,Jmeter分布式性能压测-常见问题+解决(详细整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 安装常见问题 问题…

使用npm和nrm查看源和切换镜像

一、使用npm查看当前源、切换淘宝镜像、切换官方源 &#xff08;1&#xff09;npm查看当前源&#xff1a; npm get registry &#xff08;2&#xff09;npm设置淘宝镜像源&#xff1a; npm config set registry http://registry.npm.taobao.org &#xff08;3&#xff09;n…