当前位置:实例文章 » 其他实例» [文章]算法刷题Day 35 柠檬酸找零+根据身高重建队列+用最少数量的箭引爆气球

算法刷题Day 35 柠檬酸找零+根据身高重建队列+用最少数量的箭引爆气球

发布人:shili8 发布时间:2024-11-17 21:14 阅读次数:0

**算法刷题 Day35**

### 一、柠檬酸找零#### 题目描述有 n 个柠檬,需要找零。每个柠檬的价格为 $1。如果有足够的钱,可以购买 x 个柠檬,则可以获得 x 个柠檬。如果没有足够的钱,可以购买 y 个柠檬,则可以获得 y 个柠檬。

####问题给定 n 个柠檬和找零金额,求出可以购买的最大柠檬数量。

#### 解决方案

def lemonadeChange(bought_lemons, money):
 """
 :param bought_lemons: int, 已经买过的柠檬数量 :param money: int, 找零金额 :return: int, 可以购买的最大柠檬数量 """
 # 每个柠檬价格为 $1 lemon_price =1 # 如果找零金额不足以买一颗柠檬,则返回0 if money < lemon_price:
 return0 # 计算可以购买的最大柠檬数量 max_lemons = min(money // lemon_price, bought_lemons)
 return max_lemons# 测试用例bought_lemons =10 # 已经买过的柠檬数量money =15 # 找零金额print(lemonadeChange(bought_lemons, money)) # 输出:5


### 二、根据身高重建队列#### 题目描述有 n 个学生,按照身高从低到高排列。每个学生都有一个朋友,朋友的身高与自己相同。

####问题给定 n 个学生和他们的身高,重建队列,使得每个学生的位置尽可能靠近他的朋友。

#### 解决方案
def reconstructQueue(people):
 """
 :param people: List[List[int]], 学生列表,每个学生为 [身高, 人数]
 :return: List[List[int]], 重建后的队列 """
 # 按照身高从低到高排序 people.sort(key=lambda x: x[0])
 # 初始化结果队列 result = []
 # 遍历每个学生 for person in people:
 # 找出插入位置,使得该学生的位置尽可能靠近他的朋友 insert_index = next((i for i, p in enumerate(result) if p[0] >= person[0]), len(result))
 # 插入该学生 result.insert(insert_index, person)
 return result# 测试用例people = [[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
print(reconstructQueue(people))


### 三、用最少数量的箭引爆气球#### 题目描述有 n 个气球,按照高度从低到高排列。每个气球都有一个弹弓可以射向它。

####问题给定 n 个气球和他们的高度,使用最少数量的箭来引爆所有气球。

#### 解决方案
def findMinArrowShots(points):
 """
 :param points: List[List[int]], 气球列表,每个气球为 [高度, 弹弓数量]
 :return: int, 最少数量的箭 """
 # 按照高度从低到高排序 points.sort(key=lambda x: x[0])
 # 初始化结果队列 result = []
 # 遍历每个气球 for point in points:
 # 如果当前气球可以被上一个箭引爆,则不需要额外的箭 if not result or point[0] > result[-1][0]:
 result.append(point)
 # 计算最少数量的箭 return len(result)

# 测试用例points = [[10,16], [2,8], [1,6], [7,12]]
print(findMinArrowShots(points))


以上是本篇文章的全部内容。希望这些算法刷题能帮助你提高编程能力和解决问题的技巧。

相关标签:算法
其他信息

其他资源

Top