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

DeepSeek LeetCode 2561. 重排水果 Java实现

LeetCode 2561. 重排水果题目分析有两个长度为 n 的数组 basket1 和 basket2每个数组包含若干水果。每次操作可以交换两个数组中的任意水果花费为这两个水果中较小的那个值。目标是使两个数组中的水果种类和数量完全相同即两个数组重排后相等。求最小总花费如果不可能则返回 -1。解题思路1. 可行性判断将所有水果放在一起统计频率。如果某种水果出现次数为奇数则无法平分返回 -1。2. 目标分配每个数组中每种水果应该有总次数的一半。3. 找出差异· 对于 basket1 中多出的水果需要交换出去· 对于 basket2 中多出的水果需要交换进来4. 最小交换代价· 每次交换可以交换两个水果· 最优策略是如果存在两个水果需要交换一个在 basket1 中多出一个在 basket2 中多出可以用较小代价交换它们· 或者使用全局最小值作为中转来降低交换代价5. 贪心策略· 收集所有需要从 basket1 换出的水果记为 needOut· 收集所有需要从 basket2 换出的水果记为 needIn· 对两个列表排序· 对于每一对需要交换的水果有两种选择a) 直接交换代价 min(a, b)b) 通过全局最小值中转代价 2 × globalMin· 选择较小的代价Java实现javaclass Solution {public long minCost(int[] basket1, int[] basket2) {// 统计所有水果的频率MapInteger, Integer freq new HashMap();for (int num : basket1) {freq.put(num, freq.getOrDefault(num, 0) 1);}for (int num : basket2) {freq.put(num, freq.getOrDefault(num, 0) 1);}// 检查是否可行每种水果出现次数必须为偶数for (int count : freq.values()) {if (count % 2 ! 0) {return -1;}}// 计算每个数组应该有的数量int n basket1.length;MapInteger, Integer target new HashMap();for (Map.EntryInteger, Integer entry : freq.entrySet()) {target.put(entry.getKey(), entry.getValue() / 2);}// 统计当前每个数组的水果数量MapInteger, Integer count1 new HashMap();MapInteger, Integer count2 new HashMap();for (int num : basket1) {count1.put(num, count1.getOrDefault(num, 0) 1);}for (int num : basket2) {count2.put(num, count2.getOrDefault(num, 0) 1);}// 找出需要交换的水果ListInteger needOut new ArrayList(); // basket1 中多出的ListInteger needIn new ArrayList(); // basket2 中多出的// 遍历所有水果种类SetInteger allFruits new HashSet(count1.keySet());allFruits.addAll(count2.keySet());for (int fruit : allFruits) {int targetCount target.getOrDefault(fruit, 0);int c1 count1.getOrDefault(fruit, 0);int c2 count2.getOrDefault(fruit, 0);// basket1 中多出的数量if (c1 targetCount) {for (int i 0; i c1 - targetCount; i) {needOut.add(fruit);}}// basket2 中多出的数量if (c2 targetCount) {for (int i 0; i c2 - targetCount; i) {needIn.add(fruit);}}}// 如果不需要交换if (needOut.isEmpty()) {return 0;}// 排序Collections.sort(needOut);Collections.sort(needIn);// 找到全局最小值int globalMin Integer.MAX_VALUE;for (int num : freq.keySet()) {globalMin Math.min(globalMin, num);}// 计算最小代价long totalCost 0;int size needOut.size();// 只需要考虑一半的交换因为每次交换处理一对// 贪心地选择代价最小的交换方式for (int i 0; i size; i) {int a needOut.get(i);int b needIn.get(size - 1 - i);// 直接交换的代价int directCost Math.min(a, b);// 通过全局最小值中转的代价int indirectCost 2 * globalMin;totalCost Math.min(directCost, indirectCost);}return totalCost;}}优化版本更简洁javaclass Solution {public long minCost(int[] basket1, int[] basket2) {MapInteger, Integer freq new HashMap();for (int num : basket1) freq.put(num, freq.getOrDefault(num, 0) 1);for (int num : basket2) freq.put(num, freq.getOrDefault(num, 0) - 1);ListInteger diff new ArrayList();int globalMin Integer.MAX_VALUE;for (Map.EntryInteger, Integer entry : freq.entrySet()) {int key entry.getKey();int val entry.getValue();globalMin Math.min(globalMin, key);if (val % 2 ! 0) return -1;// val为正表示basket1多出为负表示basket2多出for (int i 0; i Math.abs(val) / 2; i) {diff.add(key);}}Collections.sort(diff);long ans 0;for (int i 0; i diff.size() / 2; i) {ans Math.min(diff.get(i), 2 * globalMin);}return ans;}}核心要点1. 可行性检查所有水果总出现次数必须为偶数2. 差异计算用频率差值找出需要交换的水果3. 排序贪心将最小代价的水果配对4. 中转优化使用全局最小值可以降低交换代价因为 min(a, b) ≤ 2×min 时直接交换更优否则用中转
http://www.gsyq.cn/news/1350973.html

相关文章:

  • 精准监测,畅行无阻——DX-SZ3200系列在交通领域的应用
  • 2026现阶段混凝土搅拌站厂商选型指南:郑州市建新机械制造有限公司的综合实力解析 - 2026年企业推荐榜
  • 文献速吞兽:基于LangChain的论文辅助阅读智能体系统设计与实现
  • 有哪些真正好用的降AI率工具?能同时不降文笔还能清零AI疑似率的那种
  • 2026年4月端子箱接线盒技术性能实测排行解析:电缆接线盒/设备接线盒/PLC控制箱接线盒/TIBOX天齐电气接线盒/选择指南 - 优质品牌商家
  • 别再用curl硬刚了!3种主流语言(Python/Node.js/Java)调用ChatGPT API的工业级封装方案
  • 2025-2026年北京老房翻新装修公司推荐:TOP5排名专业评测性价比高价格选择指南 - 品牌推荐
  • 2026降AI率工具红黑榜:降AIGC平台怎么选?一文讲透
  • 6款论文降AIGC工具亲测:AI痕迹彻底消失,这款便宜又好用
  • 实测才敢推!盘点2026年抢手爆款的的降AI率网站
  • 嵌入式测试学习第 17 天:常见接口:USB、Type-C、排针
  • CNN 卷积神经网络
  • 电池-底盘一体化的热均匀性:集成时代的“均温难题”
  • 2026年5月上海搬家公司哪家好?推荐五家评测价格透明对比适用场景选择指南 - 品牌推荐
  • Sora 2导出WebM失效全解析(元数据污染+时间基错配+Alpha通道静默丢弃三重陷阱)
  • 2026 谷歌 GEO 已成流量主战场,不懂 AI 搜索直接掉队
  • 免费中医AI终极指南:仲景大模型如何让普通人也能享受专业中医咨询
  • 【Inner Monologue论文阅读】: 首次将大语言模型嵌入机器人控制闭环,实现自我反思和动态行为调整
  • 5个步骤让Windows右键菜单告别卡顿:ContextMenuManager让你的操作效率翻倍
  • 工业AI视觉全流程报错排查手册|训练、导出、推理、Docker部署、现场联调一站式解决方案
  • CANN/asc-devkit:Half转BFloat16 SIMD API
  • 工控机系统重装与环境配置全流程|工业AI离线部署标准化万能模板
  • 北京大学造出“变形金刚“AI芯片适配器
  • 三步搞定M3U8视频下载:N_m3u8DL-CLI-SimpleG终极指南
  • 空气动力学计算 · 趋势图谱(学生学习版)
  • 如何免费激活Windows和Office:3步实现永久激活的终极指南
  • 西南文创礼品定制技术拆解:高端礼品定制/会议纪念礼品/各类礼品团购/商务礼品定制/成都礼品批量定制/成都礼品批量订制/选择指南 - 优质品牌商家
  • Stargazer AI Copilot Desktop 使用说明
  • PHP 文件:深入解析与最佳实践
  • 【26年最新】新高考英语大纲词汇表3500个电子版PDF(含正序版、乱序版和默写版)