2024-01-01 K 次取反后最大化的数组和和加油站以及根据身高重建队列

news2024/11/15 19:46:51

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

思路:每一次取反最小值即可!贪心的思路就是先排序,反转负数的值,后在贪心反转最小值
class Solution:
    def largestSumAfterKNegations(self, nums: List[int], k: int) -> int:
        count = 0
        while count < k:
            # 获取最小值
            index = nums.index(min(nums))
            nums[index] = - nums[index]
            # 其实可以考虑k--   减少空间开销
            count += 1
        temp = sum(nums)
        return temp
    
class Solution:
    def largestSumAfterKNegations(self, nums: List[int], k: int) -> int:
        # 先进行排序
        nums.sort(key=lambda x :abs(x),reverse=True)
        for i in range(len(nums)):
            if nums[i] < 0 and k > 0:
                nums[i] = -nums[i]
                k -= 1
        # 为什么使用% ? 因为偶数的哇,每一次变负数在变为正数相当于没有变化
        if k % 2 == 1:
            nums[-1] = - nums[-1]
        return sum(nums)

134. 加油站

思路:贪心思路就是遇到了加油不足以到达下一个点,就直接从下一个点开始,一轮下来判断总耗油量抵消大于0即可!

img

贪心算法(方法二)

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

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

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

如图:

img

那么为什么一旦[0,i] 区间和为负数,起始位置就可以是i+1呢,i+1后面就不会出现更大的负数?

如果出现更大的负数,就是更新i,那么起始位置又变成新的i+1了。

那有没有可能 [0,i] 区间 选某一个作为起点,累加到 i这里 curSum是不会小于零呢? 如图:

img

那么局部最优:当前累加rest[i]的和curSum一旦小于0,起始位置至少要是i+1,因为从i之前开始一定不行。全局最优:找到可以跑一圈的起始位置

class Solution:
    def canCompleteCircuit(self, gas: List[int], cost: List[int]) -> int:
        cur_gas = 0
        total_gas = 0
        start = 0
        for i in range(len(gas)):
            # 当前油量是否足以达到下个站
            cur_gas += gas[i] - cost[i]
            total_gas += gas[i] - cost[i]
            if cur_gas < 0:
                cur_gas = 0
                start = i + 1
        if total_gas >=0:
            return start
        return -1

    def canCompleteCircuit1(self, gas: List[int], cost: List[int]) -> int:
        # gas是汽油  cost是花费  使用暴力解决
        for i in range(len(gas)):
            sum_ = gas[i] - cost[i]
            # 标志位
            mm = len(gas)
            index = (i + 1) % mm
            # 两个条件
            while sum_ > 0 and index != i:
                sum_ += gas[index] - cost[index]
                # index += 1  如果这样的哇,上述第二条就没有存在的意义了
                index = (index + 1) % mm
            if sum_ >= 0 and index == i:
                return i
        return -1
                    

406. 根据身高重建队列

思路:贪心的思路:拆分一组的维度进行排序,比较!确定升高排序后,后定身高从高到低看齐!!!关键点不能两个维度一起考虑,否则会思考不出来的!

注意key的二维数组排序的一些使用技巧:

  • x[0]:表示列表中每个元素 x 的第一个元素。在这个场景中,people 列表中的每个元素都是一个二元组(或列表),而 x[0] 表示每个二元组的第一个元素。
  • -x[0]:表示对 x[0] 的相反数进行比较,即按照第一个元素的逆序进行排序。这意味着具有更大第一个元素的元素将在排序后出现在列表的前面。
  • x[1]:表示每个二元组的第二个元素。

在这里插入图片描述

在这里插入图片描述

class Solution:
    def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:
        # 像这种多维度的,拆分维度!确定按身高排序先,后定身高大于或等于前面的人
        # 身高按高到底这样好排序
        people.sort(key=lambda x: (-x[0],x[1]))
        que = []
        # 比较每个第二维大小,看前面的有没有比起大,从而确定位置插入
        for people_ in people:
            que.insert(people_[1],people_)
        return que

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

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

相关文章

Python冒号的解释

1. “没什么首次没有为第二个&#xff0c;跳了三个”。它得到的切片序列的每一个第三个项目。 扩展片是你想要的。新在Python 2.3 2. Python的序列切片地址可以写成[开始&#xff1a;结束&#xff1a;一步]和任何启动&#xff0c;停止或结束可以被丢弃。a[::3]是每第三个序列。…

插入排序-排序算法

前言 在玩斗地主的时候&#xff0c;你是如何理牌的&#xff1f; 当我们手中没扑克牌时&#xff0c;不管抓的是什么牌&#xff0c;都是放到手里。其他时候拿到一张牌&#xff0c;是从右向左找一个位置&#xff1a;右边是大于这张牌&#xff0c;左边是小于等于这张牌或者左边没有…

全国的地矿分布哪里可以查到,包括经纬度坐标等信息

全国矿产地分布&#xff08;2021版&#xff09; 数据来源&#xff1a; 全国矿产地数据库2021版 (ngac.org.cn) http://data.ngac.org.cn/mineralresource/index.html 进入网站后&#xff0c;可以自由选择图层来展示10类不同的矿产分布 还可通过查询条件&#xff0c;显示所需…

Kubernetes实战(十五)-Pod垂直自动伸缩VPA实战

1 介绍 VPA 全称 Vertical Pod Autoscaler&#xff0c;即垂直 Pod 自动扩缩容&#xff0c;它根据容器资源使用率自动设置 CPU 和 内存 的requests&#xff0c;从而允许在节点上进行适当的调度&#xff0c;以便为每个 Pod 提供适当的资源。 它既可以缩小过度请求资源的容器&…

集合(二)Collection集合Set

一、Set介绍&#xff1a; 是一个散列的集合&#xff0c;数据会按照散列值存储的&#xff0c;如两个hello的散列值相同&#xff0c;会存储在同一个地址中&#xff0c;所以看到的就是只有一个hello在集合中了。 1、Set集合有两个主要的实现子类&#xff1a;Hashset和Treeset。ha…

docker镜像的生成过程

镜像的生成过程 Docker镜像的构建过程&#xff0c;大量应用了镜像间的父子关系。即下层镜像是作为上层镜像的父镜像出现的&#xff0c;下层镜像是作为上层镜像的输入出现。上层镜像是在下层镜像的基础之上变化而来。 FROM centos:7 FROM指令是Dockerfile中唯一不可缺少的命令&a…

66.网游逆向分析与插件开发-角色数据的获取-角色类的数据分析与C++还原

内容来源于&#xff1a;易道云信息技术研究院VIP课 ReClass.NET工具下载&#xff0c;它下方链接里的 逆向工具.zip 里的reclass目录下&#xff1a;注意它分x64、x32版本&#xff0c;启动是用管理员权限启动否则附加时有些进程附加不上 链接&#xff1a;https://pan.baidu.com/…

AlexNet论文精读

1:该论文解决了什么问题&#xff1f; 图像分类问题 2&#xff1a;该论文的创新点&#xff1f; 使用了大的深的卷积神经网络进行图像分类&#xff1b;采用了两块GPU进行分布式训练&#xff1b;采用了Relu进行训练加速&#xff1b;采用局部归一化提高模型泛化能力&#xff1b;…

数据结构期末复习笔记

文章目录 数据结构期末复习第一章&#xff1a;数据结构绪论第二章&#xff1a;顺序表与单链表第三章&#xff1a;其它链表第四章&#xff1a;栈如何中缀转后缀后缀如何计算 第五章&#xff1a;队列第六章&#xff1a;串第七章&#xff1a;树的概念和遍历第八章&#xff1a;赫夫…

window mysql5.7 搭建主从同步环境

window 搭建mysql5.7数据库 主从同步 主节点 配置文件my3308.cnf [mysql] # 设置mysql客户端默认字符集 default-character-setutf8mb4[mysqld] server-id8 #server-uuidbc701be9-ac71-11ee-9e35-b06ebf511956 log-binD:\mysql_5.7.19\mysql-5.7.19-winx64\mysql-bin binlog-…

【Docker项目实战】使用Docker部署nullboard任务管理工具

【Docker项目实战】使用Docker部署nullboard任务管理工具 一、nullboard介绍1.1 nullboard简介1.2 任务看板工具介绍 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍2.3 注意事项 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四…

从像素到洞见:图像分类技术的全方位解读

在本文中&#xff0c;我们深入探讨了图像分类技术的发展历程、核心技术、实际代码实现以及通过MNIST和CIFAR-10数据集的案例实战。文章不仅提供了技术细节和实际操作的指南&#xff0c;还展望了图像分类技术未来的发展趋势和挑战。 一、&#xff1a;图像分类的历史与进展 历史回…

OCS2 入门教程(四)- 机器人示例

系列文章目录 前言 OCS2 包含多个机器人示例。我们在此简要讨论每个示例的主要特点。 System State Dim. Input Dim. Constrained Caching Double Integrator 2 1 No No Cartpole 4 1 Yes No Ballbot 10 3 No No Quadrotor 12 4 No No Mobile Manipul…

Python基础教程——用Python处理Excel!

Excel是一种常见的电子表格文件格式&#xff0c;广泛用于数据记录和处理。Python提供了多个第三方库&#xff0c;可以方便地对Excel文件进行读写、数据操作和处理。本文将介绍如何使用Python对Excel文件进行处理&#xff0c;并提供相应的代码示例和详细说明。 一、安装第三方库…

FreeRTOS学习——任务通知

一、什么是任务通知 FreeRTOS 从版本 V8.2.0 开始提供任务通知这个功能&#xff0c;每个任务都有一个 32 位的通知值。按照 FreeRTOS 官方的说法&#xff0c;使用消息通知比通过二进制信号量方式解除阻塞任务快 45%&#xff0c; 并且更加省内存&#xff08;无需创建队 列&#…

linux内存浅析

内存的基本概念 操作系统内存非常重要且比较复杂&#xff0c;其中有许多知识点仍然需要掌握才能更进一步分析程序问题。由于是初次全面系统地接触OS内存&#xff0c;目的是为了全面且低层次地理解linux内存相关概念&#xff0c;不会深入其中原理&#xff0c;所以本章也会尽量避…

隐患上报二维码:扫码上报隐患,可实时跟踪整改进度

传统的隐患上报方式通常需要员工填写报告单或口头汇报&#xff0c;不仅消耗大量时间&#xff0c;还可能导致信息传递失真、无法及时跟进隐患处理进度等问题。 可以在草料上搭建隐患上报系统&#xff0c;员工扫码即可上报隐患线索&#xff0c;管理人员可实时收到消息提醒&#…

3D Web可视化开发工具包HOOPS Communicator:提供Web端浏览大型模型新方案!

前言&#xff1a;HOOPS Communicator是Tech Soft 3D旗下的主流产品之一&#xff0c;具有强大的、专用的高性能图形内核&#xff0c;专注于基于Web的高级3D工程应用程序。其由HOOPS Server和HOOPS Web Viewer两大部分组成&#xff0c;提供了HOOPS Convertrer、Data Authoring的模…

备战2024美赛数学建模,文末获取历史优秀论文

总说&#xff08;历年美赛优秀论文可获取&#xff09; 数模的题型千变万化&#xff0c;我今天想讲的主要是一些「画图」、「建模」、「写作」和「论文结构」的思路&#xff0c;这些往往是美赛阅卷官最看重的点&#xff0c;突破了这些点&#xff0c;才能真正让你的美赛论文更上…

PACS医学影像报告管理系统源码带CT三维后处理技术

PACS从各种医学影像检查设备中获取、存储、处理影像数据&#xff0c;传输到体检信息系统中&#xff0c;生成图文并茂的体检报告&#xff0c;满足体检中心高水准、高效率影像处理的需要。 自主知识产权&#xff1a;拥有完整知识产权&#xff0c;能够同其他模块无缝对接 国际标准…