当前位置: 首页 > news >正文

贪心算法(三) ---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()函数的键。

代码解释

  1. compare_strings 函数返回1、0或-1,这与Python比较操作符的返回值一致。
  2. cmp_to_key(compare_strings) 将compare_strings转换为一个键函数。
  3. 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)

http://www.lryc.cn/news/406070.html

相关文章:

  • 学生信息管理系统详细设计文档
  • leetcode10 -- 正则表达式匹配
  • Binius-based zkVM:为Polygon AggLayer开发、FPGA加速的zkVM
  • 基于 HTML+ECharts 实现的大数据可视化平台模板(含源码)
  • 特征工程在机器学习中的重要性
  • 【css】flex布局父元素宽度或高度无法被子元素撑开-bug记录
  • Music Tag Editor Pro for Mac:强大的音频标签管理工具
  • 2024秋招算法
  • El-Table 表格的表头字段切换
  • 分布式事务 详解
  • 【git】太大了失败: fatal: fetch-pack: invalid index-pack output
  • 在 ArchLinux 上编译运行 axmol 引擎
  • 云计算的三种服务模式
  • Pytorch使用教学1-Tensor的创建
  • R语言统计分析——数据管理4
  • 用uniapp 及socket.io做一个简单聊天app 2
  • Si24R03:高度集成的低功耗SOC芯片中文资料
  • K8s-控制器
  • Meta 发布 LLAMA 3.1;特斯拉无人出租车推迟至 10 月;谷歌将向 Waymo 再投 50 亿美元
  • C 语言基础概念总结
  • Django教程(000):初识Django
  • SQLynx数据库管理工具
  • Java基础06:变量,常量,作用域(狂神说Java)
  • inflight 守恒建模
  • HarmonyOS NEXT星河版零基础入门到实战
  • 测试开发面试题---JVM
  • python库 - jsonpath
  • [RK3588][Android12] Android->OTA包超过4个G导致打包失败
  • (雷达数据处理中的)跟踪算法(3) – 可用于目标跟踪实践的数据集介绍解析
  • 【C语言报错已解决】Use of Uninitialized Variable