贪心算法(三) ---cmp_to_key, 力扣452,力扣179
目录
cmp_to_key
比较函数
键函数
cmp_to_key 的作用
使用 cmp_to_key
代码解释
力扣452 ---射气球
题目
分析
代码
力扣179 ---最大数
题目
分析
代码
cmp_to_key
在Python中,cmp_to_key 是一个函数,它将一个比较函数转换成一个键函数,使得比较函数可以用作排序算法的键。这个函数在Python 3中通过functools模块提供。
比较函数
在Python中,比较函数是一个接受两个参数并返回以下三种值之一的函数:
- 负数:表示第一个参数小于第二个参数。
- 零:表示两个参数相等。
- 正数:表示第一个参数大于第二个参数。
键函数
键函数是一个接受一个元素并返回一个值的函数,这个返回的值将被用作排序的依据。在Python的sort()方法或sorted()函数中,可以提供一个键函数来决定排序的方式。
cmp_to_key 的作用
由于Python的sort()方法和sorted()函数需要键函数返回的是具体的比较结果(-1、0、1),而不是比较函数的返回值(负数、零、正数),因此cmp_to_key的作用就是将比较函数转换成一个符合要求的键函数。
使用 cmp_to_key
以下是如何使用cmp_to_key的一个例子:
python
from functools import cmp_to_keydef compare_strings(a, b):# 比较两个字符串return (a > b) - (a < b)# 使用cmp_to_key将比较函数转换成键函数
sorted_strings = sorted(["banana", "apple", "cherry"], key=cmp_to_key(compare_strings))
print(sorted_strings)
在这个例子中:
- compare_strings 是一个比较函数,它比较两个字符串a和b。
- cmp_to_key(compare_strings) 将compare_strings转换成一个键函数,这个键函数可以用作sorted()函数的键。
代码解释
- compare_strings 函数返回1、0或-1,这与Python比较操作符的返回值一致。
- cmp_to_key(compare_strings) 将compare_strings转换为一个键函数。
- sorted() 函数使用这个键函数对字符串列表进行排序。
力扣452 ---射气球
有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] = [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。
一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被 引爆 。可以射出的弓箭的数量 没有限制 。 弓箭一旦被射出之后,可以无限地前进。
给你一个数组 points ,返回引爆所有气球所必须射出的 最小 弓箭数 。
示例 1:
输入:points = [[10,16],[2,8],[1,6],[7,12]] 输出:2 解释:气球可以用2支箭来爆破: -在x = 6处射出箭,击破气球[2,8]和[1,6]。 -在x = 11处发射箭,击破气球[10,16]和[7,12]。示例 2:
输入:points = [[1,2],[3,4],[5,6],[7,8]] 输出:4 解释:每个气球需要射出一支箭,总共需要4支箭。示例 3:
输入:points = [[1,2],[2,3],[3,4],[4,5]] 输出:2 解释:气球可以用2支箭来爆破: - 在x = 2处发射箭,击破气球[1,2]和[2,3]。 - 在x = 4处射出箭,击破气球[3,4]和[4,5]。提示:
- 1 <= points.length <= 105
- points[i].length == 2
- -231 <= xstart < xend <= 231 - 1
题目
分析
代码
class Solution:def findMinArrowShots(self, points: List[List[int]]) -> int:if not points:return 0points.sort(key=lambda x: x[0])arrow = 1right = points[0][1]for i in range(0, len(points)): # 修正了循环语法if right >= points[i][0]: # 气球的开始时间小于等于当前箭的结束时间if right > points[i][1]: # 更新箭的结束时间为当前气球的结束时间,如果它更小的话right = points[i][1]else:arrow += 1right = points[i][1] # 新箭的结束时间是当前气球的结束时间return arrow
力扣179 ---最大数
题目
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例 1:
输入:nums = [10,2] 输出:"210"示例 2:
输入:nums = [3,30,34,5,9] 输出:"9534330"提示:
- 1 <= nums.length <= 100
- 0 <= nums[i] <= 109
分析
代码
class Solution:def largestNumber(self, nums: List[int]) -> str:def sort_rule(x, y):a, b = x + y, y + xif a < b: return 1elif a > b: return -1else: return 0strs = [str(num) for num in nums]strs.sort(key = cmp_to_key(sort_rule))if strs[0] == "0":return "0"return ''.join(strs)
相关文章:

贪心算法(三) ---cmp_to_key, 力扣452,力扣179
目录 cmp_to_key 比较函数 键函数 cmp_to_key 的作用 使用 cmp_to_key 代码解释 力扣452 ---射气球 题目 分析 代码 力扣179 ---最大数 题目 分析 代码 cmp_to_key 在Python中,cmp_to_key 是一个函数,它将一个比较函数转换成一个键函数…...

学生信息管理系统详细设计文档
一、设计概述 学生信息管理系统是一个用于管理学生信息的软件系统,旨在提高学校对学生信息的管理效率。本系统主要包括学生信息管理、课程信息管理、成绩信息管理、班级信息管理等功能模块。详细设计阶段的目标是确定各个模块的实现算法,并精确地表达这…...

leetcode10 -- 正则表达式匹配
题目描述: 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符* 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。 示例 1࿱…...

Binius-based zkVM:为Polygon AggLayer开发、FPGA加速的zkVM
1. 引言 近日,ZK硬件加速巨头Irreducible和Polygon团队宣布联合开发生产级的Binius-based zkVM,用于助力Polygon AggLayer,实现具有低开销、硬件加速的binary proofs。 Irreducible(曾用名为Ulvetanna)团队 Benjamin …...

基于 HTML+ECharts 实现的大数据可视化平台模板(含源码)
构建大数据可视化平台模板:基于 HTML 和 ECharts 的实现 大数据的可视化对于企业决策、市场分析和业务洞察至关重要。通过直观的数据展示,团队可以快速理解复杂的数据模式,发现潜在的业务机会。本文将详细介绍如何利用 HTML 和 ECharts 实现一…...
特征工程在机器学习中的重要性
特征工程在机器学习中的重要性 特征工程在机器学习中占据着至关重要的地位,它是连接原始数据与机器学习模型之间的桥梁。通过特征工程,我们可以将原始数据转换为机器学习算法能够有效利用的形式,从而提高模型的性能和准确性。以下是特征工程…...

【css】flex布局父元素宽度或高度无法被子元素撑开-bug记录
简言 flex布局父元素宽度或高度无法被子元素撑开问题。 解决方案: 手动计算子元素内容所占宽高,手动赋值给父元素即可。 flex布局宽高度问题 flex布局现在是特别常见得布局方式。 在此记录一个注意点:flex布局在不换行得情况下,…...

Music Tag Editor Pro for Mac:强大的音频标签管理工具
Music Tag Editor Pro for Mac是一款专为Mac系统设计的音频标签管理工具,其简易直观的操作界面和强大的功能深受用户喜爱。 这款软件的核心功能在于它能够批量编辑各类音频文件的标签。无论是修改元数据、重命名文件,还是转换音乐标签的文本编码&#x…...
2024秋招算法
文章目录 参考资料一 数组1.1 二分查找1.2 移除元素1.3 长度最小的子数组1.4 螺旋矩阵1.5 在排序数组中查找元素的第一个和最后一个位置 二 链表2.1 移除链表元素2.2 设计链表2.3 反转链表2.4 两两交换链表中的节点2.5 删除链表的倒数第N个节点2.6 链表相交2.7 环形链表II 三 哈…...

El-Table 表格的表头字段切换
最近写了一个小功能,比较有意思,特此博客记录。 提出需求:需要表头字段变化,但是我在官网上的表格相关上查找,没有发现便捷方法。 于是我有两个想法:1.做三个不同的表格。2.做一个表格使用不同的表头字段。…...

分布式事务 详解
1.简介 2.本地事务失效问题 可以使用AOP starter aspectJ 代理 这样就可以拿到它的上下文的代理对象,当然是有这样的需求才这么做 如果你的事务只是想默认的传播行为,共用上面的事务,就可以不用这个啦 详情请去了解 Raft 算法 还有 pa…...
【git】太大了失败: fatal: fetch-pack: invalid index-pack output
#‘’ Git仓库过大致使clone失败的解决方法 上述大神的方法,亲测有效 中途失败: 太大了 fetch-pack: unexpected disconnect while reading sideband packet fatal: early EOF fatal: fetch-pack: invalid index-pack output关闭压缩 git config --global core.…...

在 ArchLinux 上编译运行 axmol 引擎
本文将在 Windows 10 上安装 Arch WSL 中编译 axmol 请确保 WSL2 已正确安装 1. 在微软应用商店安装 ArchLinux 2. 打开 Arch,按照提示输入用户名和密码,尽量简单 3. 配置清华源,速度快的起飞,否则,各种包会安装失败…...
云计算的三种服务模式
云计算的三种主要服务模式分别是基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)。每种服务模式都提供不同级别的抽象和管理,满足不同的需求和用例。以下是对这三种服务模式的详细介…...

Pytorch使用教学1-Tensor的创建
0 导读 在我们不知道什么是深度学习计算框架时,我们可以把PyTorch看做是Python的第三方库,在PyTorch中定义了适用于深度学习的张量Tensor,以及张量的各类计算。就相当于NumPy中定义的Array和对应的科学计算方法,正是这些基本数据…...

R语言统计分析——数据管理4
参考资料:R语言实战【第2版】 1、数学函数 abs(x):绝对值 sqrt(x):平方根 ceiling(x):不小于x的最小整数 floor(x):不大于x的最大整数 trunc(x):向0的方向截取x中的整数部分 round(x,digitsn)&#…...

用uniapp 及socket.io做一个简单聊天app 2
在这里只有群聊,二个好友聊天,可以认为是建了一个二人的群聊。 const express require(express); const http require(http); const socketIo require(socket.io); const cors require(cors); // 引入 cors 中间件const app express(); const serv…...

Si24R03:高度集成的低功耗SOC芯片中文资料
Si24R03是一款高度集成的低功耗SOC芯片,具有低功耗、Low Pin Count、宽电压工作范围,集成了13/14/15/16位精度的 ADC、LVD、UART、SPI、I2C、TIMER、WUP、IWDG、RTC、无线收发器等丰富的外设。 合封说明:Si24R03为CSM32RV003和Si24R1的合封芯…...

K8s-控制器
一 为什么使用控制器 pod控制器 作用:1.pod类型资源删除,不会重建 2.控制器可以帮助用户监控,并保证节点上运行定义好的pod副本数 3.pod超过或低于用户期望,控制器会创建、删除pod副本数量 控制器类型&am…...

Meta 发布 LLAMA 3.1;特斯拉无人出租车推迟至 10 月;谷歌将向 Waymo 再投 50 亿美元
先瞧一下 Chat 和 Agent 的差异。 Chat(聊天):纯粹的 Chat,宛如一个主要由“大脑与嘴”组成的智能体,着重于信息处置和语言沟通。诸如 ChatGPT 这般的系统,其能够领会用户的询问,给出有益且连贯…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...