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

news2025/7/10 17:27:58

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

        1:题目描述(1005. K 次取反后最大化的数组和)

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

  • 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。

        重复这个过程恰好 k 次。可以多次选择同一个下标 i 。

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

        2:解题思路

class Solution:
    def largestSumAfterKNegations(self, nums: List[int], k: int) -> int:
        # 有负数,最小的负数先取相反数,这样得到的和是最大的
        # 有正数,最小的正数先取相反数,这样得到的和也是最大的
        # 对nums按绝对值从大到小进行排序,这样绝对值最小的值就在最后面
        nums = sorted(nums, key=abs, reverse=True)           
        for i in range(len(nums)):
            # 遍历nums,当k>0并且nums[i]小于0,说明此时的负数是最小的
            if k > 0 and nums[i] < 0:
                # 取其相反数
                nums[i] = -nums[i]
                # k减1
                k -= 1
        # 当遍历完nums后,k任然大于0
        # 此时nums中的数为非负数,最小的值在后面
        # 此时只需要将最后面的元素进行剩余k次的取相反数,就可得到最大和
        if k > 0:
            nums[-1] *= (-1)**k            # (-1)**k中的-1需要用括号扩起来
        return sum(nums)

二、LeetCode134. 加油站

        1:题目描述(134. 加油站)

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

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

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

        2:解题思路

class Solution:
    def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:
        # 暴力法---超时了
        # # 以gas的每个点作为起点,看是否能绕行一周
        # for i in range(len(gas)):
        #     rest = gas[i] - cost[i]         # 记录从i到i+1所剩余的油量
        #     index = (i+1)%len(gas)          # 记录下一个到到达的加油站
        #     while rest > 0 and index != i:
        #         rest += gas[index] - cost[index]     # 叠加剩余的油量
        #         index = (index+1)%len(gas)    # 下一个加油站
        #     # 如果跑完一圈剩余的油量大于等于0,则存在解
        #     if rest >= 0 and index == i:
        #         return i
        # # 遍历完所有的起点,都没有符合要求的,就返回-1
        # return -1
        
        start = 0          # 加油站的起始位置
        curSum = 0         
        totalSum = 0       # 统计剩余的油量
        # 从第0个加油站开始计算剩余油量
        for i in range(len(gas)):
            curSum += gas[i] - cost[i]       # 统计剩余油量
            totalSum += gas[i] - cost[i]     # 统计剩余油量
            if curSum < 0:
                # 当剩余油量小于0,说明已i之前的站点为起点,就已经不够行使到当前加油站了
                curSum = 0                   # 重置剩余油量,为0
                start = i+1                  # 起始位置为下一个加油站
        if totalSum < 0:
            # 剩余的油量小于0,则不能行使一周
            return -1
        # 最后剩余的油量大于等于0,则从start为起点可以绕行一周
        return start

三、LeetCode135. 分发糖果

        1:题目描述(135. 分发糖果)

        n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。

        你需要按照以下要求,给这些孩子分发糖果:

  • 每个孩子至少分配到 1 个糖果。
  • 相邻两个孩子评分更高的孩子会获得更多的糖果。

        请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。

        2:解题思路

class Solution:
    def candy(self, ratings: List[int]) -> int:
        candyVec = [1] * len(ratings)          # 先定义每个孩子分配到1个糖果
        # 从左向右遍历,若当前孩子的评分高于前一个孩子时,当前孩子就比前一个孩子多分配一个糖果
        for i in range(1,len(ratings)):
            if ratings[i] > ratings[i-1]:
                candyVec[i] = candyVec[i-1] + 1
        # 从右向左遍历,若当前孩子的评分高于后面一个孩子,当前孩子需要比后一个孩子多分配一个糖果
        for j in range(len(ratings)-2, -1, -1):
            if ratings[j] > ratings[j+1]:
                # 因为相邻两个孩子评分更高的孩子获得更多的糖果
                # 所以当前孩子所获得的糖果需要在当前已获得的糖果(之前比较右孩子大于左孩子得到的糖果数量)和比后一个孩子多分配一个糖果中取最大值
                # 只有取最大的才能既保持对左边candyVec[i - 1]的糖果多,也比右边candyVec[i + 1]的糖果多
                candyVec[j] = max(candyVec[j], candyVec[j+1]+1)
        return sum(candyVec)

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

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

相关文章

TNF 又见 《Cell》

现有的研究表明&#xff0c;需要新的机会来增加免疫检查点封锁&#xff08;Immunecheckpoint blockade&#xff0c;ICB&#xff09;的影响。尽管干扰素&#xff08;IFN&#xff09;γ途径同时具有 ICB 抗性因子和治疗机会&#xff0c;但至今为止&#xff0c;研究人员尚未系统地…

采用新项目管理软件的四个步骤

这是采用新项目管理软件的有趣之处&#xff1a;它本身实际上是一个重大项目&#xff0c;而且您的组织越大&#xff0c;这个过程就越艰巨。 当然&#xff0c;成功的项目管理实施最终将有助于简化您的运营并最大限度地提高跨部门的效率——这有利于团队成员的士气、客户满意度…

国内外的免费AI作图工具

1.文心一格 文心一格 - AI艺术和创意辅助平台 “推荐”页面操作比较简单&#xff0c;只需要需要简单的一句话&#xff0c;等几分钟就可以直接生成&#xff1a; 主要可以用来生成不同“氛围感”十足的场景&#xff1a; 美丽的花田&#xff1a; 优点&#xff1a; 1.比较容易…

【数据结构】—— 二叉树(C)

二叉树 文章目录二叉树二叉树的概念&#xff1a;树的术语二叉树的大概样式先序创建二叉树二叉树的遍历方式先序遍历中序遍历后序遍历二叉树的概念&#xff1a; 二叉树&#xff08;Binary Tree&#xff09;是n(n>0)个结点的有限集合&#xff0c;该集合或者为空集&#xff08…

bugku-web-安慰奖

题目没给提示 点开链接 是空白页面 查看源代码 base64加密 拿去解码 备份文件 使用工具跑一下目录 &#xff08;dirsearch) 存在一个flag.php文件 但是访问没有结果 锁定index.php.bak 文件 下载下来 打开 进行代码审计 是php序列化 反序列化的内容 代码审计&…

【Python】Numpy生成坐标网格

文章目录meshgridmgrid和ogridindicesmeshgrid 在三维图的绘制过程中&#xff0c;一般需要x,y,zx,y,zx,y,z之间的对应关系&#xff0c;但对于图像而言&#xff0c;其x,yx,yx,y轴坐标是体现在像素栅格中的&#xff0c;从而图像矩阵中的像素强度&#xff0c;其实表示的是zzz轴的…

深度学习算法应用——使用LSTM对双色球进行统计与预测

前言 福彩双色球的玩法和规则是双色球投注区分为红色球号码区和蓝色球号码区&#xff0c;红色球号码从1-33&#xff0c;蓝色球号码是从1-16。投注方法是&#xff0c;从红色区选出6个不重复的号码再加上蓝色区的一个号组成一个投注组。双色球通过摇奖器确定中奖号码&#xff0c…

Zookeeper中的watch机制

客户端&#xff0c;可以通过在znode上设置watch&#xff0c;实现实时监听znode的变化Watch事件是⼀个⼀次性的触发器&#xff0c;当被设置了Watch的数据发⽣了改变的时候&#xff0c;则服务器将这个改变发送给设置了Watch的客户端⽗节点的创建&#xff0c;修改&#xff0c;删除…

观测云产品更新|新增观测云、SLS 联合解决方案;新增 3 个智能巡检配置文档;新增链路错误追踪查看器等

观测云更新 新增观测云、SLS 联合解决方案 观测云新增 SLS 存储方案&#xff0c;支持阿里云 SLS 用户能够快速使用观测云做数据查看分析。在观测云进行商业版注册/升级时&#xff0c;选择”阿里云账号结算“后&#xff0c;您可以选择SLS 存储方案&#xff0c;将数据存放在自…

SpringBoot SpringBoot 开发实用篇 1 热部署 1.3 热部署范围配置

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇1 热部署1.3 热部署范围配置1.3.1 问题引入1.3.2 热部署配置范围1.3.…

Spring Cloud(十):Spring Cloud Skywalking 以及 JavaAgent

链路追踪组件选型 Zipkin是Twitter开源的调用链分析工具&#xff0c;目前基于springcloud sleuth得到了广泛的使用&#xff0c;特点是轻量&#xff0c;使用部署简单。Pinpoint是韩国人开源的基于字节码注入的调用链分析&#xff0c;以及应用监控分析工具。特点是支持多种插件&…

CASIO程序(线路计算6.0版)

一、扩展变量设置说明 统计各种要素点的数目 各要素点数目表 名 称 平曲线交点 竖曲线变坡点 超高起始点 最多台阶数 线路导线点 数目&#xff08;个&#xff09; a b c d e 要素点数目为0时取值 -1 -5/3 0 0 0 备 注 不含起终点 不含起终点 含起…

【LeetCode 力扣】1.两数之和 Java实现 哈希表

题目链接&#xff1a;1.两数之和 1 原题描述&#xff1a; 2 解题思路 初看题目相信大家都能想到枚举的做法&#xff0c;简单来说把数组里面的所有值&#xff0c;均两两组合相加。若结果与target相等&#xff0c;则将两个数字的下标返回即可。 代码实现1&#xff1a; class …

C++入门学习5-共用体,枚举类型,宏定义

入门学习五共用体枚举类型宏定义共用体 共用体也称为联合体&#xff0c;其特点就是用一段连续的内存存储多个不同数据类型的数据&#xff0c;在写法上与结构体相似&#xff0c;但是在同一时刻&#xff0c;共用体中只有一个值是有效的&#xff0c;其大小由共用体中最大的数据类…

做PPT绝对不能错过这5个网站

免费高质量PPT模板网站&#xff0c;建议收藏&#xff01;1、菜鸟图库 https://www.sucai999.com/pptx.html?vNTYxMjky菜鸟图库里面有各种类型的PPT模板和素材。下载后模板可以直接套用&#xff0c;也可以自己添加素材进行修改。所有素材都一一进行了详细的分类&#xff0c;而且…

【前端】Flet:一款支持python及多语言开发的UI库

文章目录介绍开发生态支持语言运行体验组件API热更新开发计划 Roadmap2022 7月-8月安全手机端桌面端Controls(控件)核心功能用户指引&#xff08;User education&#xff09;2022 9月到12月手机端控件&#xff08;Controls&#xff09;编程语言支持核心功能介绍 Flet enables …

【设计模式-2】策略模式 - 避免冗余的if-else判断。数据库迁移框架、flink 类型转换框架例子对策略模式的使用

文章目录1. 介绍2. 策略模式结构3. 策略模式使用3.1. 场景一: 表迁移3.2. flink connector类型转换1. 介绍 当if else过多时&#xff0c;可以通过策略模式来进行重构。先定义一个接口&#xff0c;各else处理分支实现这个接口&#xff0c;并定义 < 条件 , 处理类 > 的映射…

NNG 通信模式

NNG 是 nanomsg 的继任版本,纯c语言开发&#xff0c;工作模式分为几种&#xff1a; 1&#xff0c;Pipeline (A One-Way Pipe) 单向通信&#xff0c;类似与生产者消费者模型的消息队列&#xff0c;消息从推方流向拉方。 #include <stdlib.h> #include <stdio.h> #…

[附源码]java毕业设计基于的图书馆管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

RabbitMQ(四):RabbitMQ高级特性

消息队列在使用过程中&#xff0c;面临着很多实际问题需要思考&#xff1a; 消息可靠性问题&#xff1a;如何确保发送的消息至少被消费—次延迟消息问题&#xff1a;如何实现消息的延迟投递消息堆积问题&#xff1a;如何解决数百万消息堆积&#xff0c;无法及时消费的问题高可用…