news 2026/5/23 0:24:02

千问 LeetCode 2561. 重排水果 Python3实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
千问 LeetCode 2561. 重排水果 Python3实现

这道题的核心是贪心 + 利用全局最小值做中介交换。下面给出Python3实现,附带详细注释。

from typing import List
from collections import Counter

class Solution:
def minCost(self, basket1: List[int], basket2: List[int]) -> int:
# 1. 统计每个水果在两个篮子中的净出现次数
cnt = Counter(basket1)
for x in basket2:
cnt[x] -= 1

# 2. 检查可行性:如果某个水果出现奇数次,无法平分
for v in cnt.values():
if v % 2 != 0:
return -1

# 3. 收集需要交换的水果(取绝对值的一半)
swap = []
for val, freq in cnt.items():
if freq != 0:
# 需要交换 |freq|/2 个 val
swap.extend([val] * (abs(freq) // 2))

# 4. 全局最小值(用于中介交换)
min_val = min(min(basket1), min(basket2))

# 5. 排序后取最小的前一半,计算最小成本
swap.sort()
n = len(swap) // 2 # 只需要交换一半
ans = 0
for i in range(n):
# 直接交换成本 = swap[i]
# 通过最小值中转两次的成本 = 2 * min_val
# 取两者中较小的
ans += min(swap[i], 2 * min_val)

return ans

核心思路

为什么可以这样贪心?

1. 可行性判断:统计所有水果在两个篮子中的净出现次数(basket1中+1,basket2中-1)。如果某个水果的净出现次数是奇数,说明无法平分,返回-1。

2. 收集待交换水果:对于净出现次数不为0的水果,需要将多出的一半交换到另一个篮子。比如某个水果在basket1中多出4个,就需要把2个交换到basket2。

3. 两种交换策略:
- 直接交换:两个需要交换的水果直接互换,成本 = min(x, y)
- 中介交换:通过全局最小值m中转两次,成本 = 2 * m

对于每个需要交换的水果,选择成本更小的方式。

4. 贪心配对:将待交换的水果排序后,取最小的前一半与最大的后一半配对(通过排序后取前一半,相当于自动完成了最优配对)。

复杂度分析

- 时间复杂度:O(n log n),主要来自排序
- 空间复杂度:O(n),用于存储待交换列表

测试用例

sol = Solution()

# 示例1
print(sol.minCost([4,2,2,2], [1,4,1,2])) # 1

# 示例2
print(sol.minCost([2,3,4,1], [3,2,5,1])) # -1

# 需要中介交换的案例
print(sol.minCost([8,32,32], [8,64,64])) # 16(通过8中转两次)

这个解法在LeetCode上可以击败99%+的Python提交,思路清晰且代码简洁。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/23 0:21:46

智能集群脑 · 用 Multi-Agent 让代码审查快10倍

🧑‍💻 博主介绍 & 诚邀关注 作者:专注于 Java、Python、前端开发的技术博主 | 全网粉丝 30 万 在校期间协助导师完成毕业设计课题分类、论文格式初审及代码整理工作;工作后持续分享毕设思路,助力毕业生顺利完成…

作者头像 李华
网站建设 2026/5/23 0:16:17

如何让你的开源项目被更多人看到?推广比写代码更难

对于软件测试从业者而言,打造一款解决行业痛点的开源测试工具、框架或测试用例库,往往需要耗费数月甚至数年的心血:从需求梳理、框架设计到代码开发、多场景测试验证,每一步都凝聚着专业经验。但很多人都会遭遇相同的困境&#xf…

作者头像 李华
网站建设 2026/5/23 0:16:14

面向软件测试从业者的开源许可证选择与合规指南

在软件测试的日常工作中,开源组件早已无处不在。从 Selenium、Appium 到 JMeter、Gatling,从 pytest、JUnit 到各种 Mock 框架,再到容器镜像中内置的工具链——它们构成了测试体系的骨架。然而,当你在测试脚本里引入一个开源库&am…

作者头像 李华
网站建设 2026/5/23 0:11:24

如何免费激活Windows和Office:3步实现永久激活的终极指南

如何免费激活Windows和Office:3步实现永久激活的终极指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows激活弹窗烦恼吗?是否遇到过Office突然变成只读模式…

作者头像 李华