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

LeetCode 每日一题笔记 日期:2026.05.31 题目:2126. 摧毁小行星

LeetCode 每日一题笔记

0. 前言

  • 日期:2026.05.31
  • 题目:2126. 摧毁小行星
  • 难度:中等
  • 标签:数组、贪心、排序

1. 题目理解

问题描述
给定行星初始质量mass和小行星数组asteroids,可以按任意顺序与小行星碰撞:

  • 行星质量 ≥ 小行星质量:行星摧毁小行星,并获得其质量;
  • 行星质量 < 小行星质量:行星被摧毁。
    判断是否存在一种顺序,让行星摧毁所有小行星。

示例

输入:mass = 10, asteroids = [3,9,19,5,21]
输出:true
解释:按 [3,5,9,19,21] 的顺序,行星质量依次增长为 13→18→27→46→67,可全部摧毁。

2. 解题思路

核心观察

  • 贪心策略:优先摧毁质量小的小行星,才能不断增长行星质量,为后续摧毁更大的小行星创造条件;
  • 排序后遍历,只要过程中行星质量始终不小于当前小行星,就能完成全部摧毁。

算法步骤

  1. 将小行星数组按升序排序;
  2. long类型记录行星当前质量,避免溢出;
  3. 遍历排序后的数组,若行星质量小于当前小行星,直接返回false
  4. 否则累加小行星质量,遍历结束返回true

3. 代码实现

packagelc2126;importjava.util.Arrays;classSolution{publicbooleanasteroidsDestroyed(intmass,int[]asteroids){Arrays.sort(asteroids);longcur=mass;for(inta:asteroids){if(cur<a)returnfalse;cur+=a;}returntrue;}}

4. 代码优化说明

(代码未做任何修改,仅添加注释讲解)

classSolution{publicbooleanasteroidsDestroyed(intmass,int[]asteroids){// 找到所有小行星中的最大质量,用于确定二进制分组的最高位intmx=0;for(intx:asteroids){mx=Math.max(mx,x);}// 计算最大质量的二进制位数,确定分组数量intmaxWidth=32-Integer.numberOfLeadingZeros(mx);// sum数组:存储每个二进制位分组内所有小行星的质量和long[]sum=newlong[maxWidth];// mn数组:存储每个二进制位分组内的最小小行星质量int[]mn=newint[maxWidth];Arrays.fill(mn,Integer.MAX_VALUE);// 按二进制最高位对小行星进行分组for(intx:asteroids){// 计算当前小行星的最高二进制位inti=31-Integer.numberOfLeadingZeros(x);sum[i]+=x;mn[i]=Math.min(mn[i],x);}// 行星当前质量,用long避免溢出longm=mass;// 按二进制位从低到高遍历分组for(inti=0;i<maxWidth;i++){// 该分组无小行星,跳过if(mn[i]==Integer.MAX_VALUE){continue;}// 行星质量小于该分组最小的小行星,无法摧毁,直接返回falseif(m<mn[i]){returnfalse;}// 摧毁该分组所有小行星,累加质量m+=sum[i];}// 所有分组都可摧毁,返回truereturntrue;}}

5. 复杂度分析

  • 排序贪心解法
    • 时间复杂度:O(nlog⁡n)O(n \log n)O(nlogn),排序占主要开销,遍历为线性。
    • 空间复杂度:O(1)O(1)O(1),原地排序(不考虑排序栈开销),仅用常数变量。
  • 二进制分组优化解法
    • 时间复杂度:O(n)O(n)O(n),两次线性遍历,无排序开销。
    • 空间复杂度:O(log⁡M)O(\log M)O(logM)MMM为最大小行星质量,分组数组大小为常数级。

6. 总结

  • 核心:贪心思想,优先处理质量小的目标,是解决此类“增长型”问题的通用策略;
  • 排序解法直观易写,面试优先使用;二进制分组解法在大数据下效率更高,可作为进阶优化;
  • 关键细节:行星质量累加可能超过int范围,需用long类型存储,避免溢出错误。
http://www.jsqmd.com/news/925518/

相关文章:

  • 多张图片转pdf的免费工具推荐?2026图片合并转PDF免费方法汇总 - 科技大爆炸
  • 如何永久备份微信聊天记录:WeChatMsg完整本地化解决方案指南
  • Go 语言反射(Reflection)详解
  • 2026全国制造业AI企业应用十大实战服务商深度评测:为何说“人才孵化”才是AI落地的唯一命门? - 速递信息
  • 2026高精度超声波焊接机:解读行业三大核心趋势 - 速递信息
  • 2026手机照片免费转JPG教程!安卓苹果HEIC转JPG不用软件、在线无水印方法
  • 番茄小说永久保存终极指南:3步构建你的个人数字图书馆
  • Redis 常用操作笔记(Go 开发实战)
  • J-Link/J-Trace调试工具在嵌入式开发中的应用与优化
  • 思源宋体终极指南:5分钟掌握免费开源中文字体完整配置方案
  • 别再用Blender了!用Python这5个库搞定3D建模,从数据处理到打印全流程
  • MD怎么转Word?2026年保姆级教程,3步用小程序秒转
  • 全国十大猎头公司实测排行:核心能力对比解析 - 得赢
  • 长三角淘宝网店运营服务商综合能力排行盘点 - 资讯纵览
  • 苏州卫生间楼顶漏水怎么办?厨房、阳台、外墙漏水本地根治方法+靠谱维修指南 - 吉修匠
  • Winhance中文版:一站式Windows系统优化与配置管理解决方案
  • 终极指南:如何快速破解遗忘的压缩包密码
  • 2026EPS转PDF方法大全!Windows/Mac/在线工具及PS/AI转换教程
  • 别再死记命令了!图解华为交换机MAC地址那些事:老化时间、刷新ARP与端口安全详解
  • Go 语言闭包(Closure)详解
  • 淘宝网店运营服务商排行:知名三家机构实力解析 - 速递信息
  • 2026苏州防水哪家好 本地正规补漏公司口碑排名避坑指南 - 吉修匠
  • 2026年全国制造业AI应用实战服务商优选榜单与采购推荐指南 - 速递信息
  • Python集成测试:验证系统协同工作
  • ESP32显示驱动终极指南:打造高效嵌入式图形界面
  • Go 语言匿名函数详解
  • PPT怎么转PDF?2026年手把手教你(小程序/PowerPoint/WPS/在线工具完整方案)
  • 终极炉石传说插件:HsMod完整功能指南与安装教程
  • 不止于收发:挖掘ZCANPRO的UDS诊断与自动化测试潜力,提升车载测试效率
  • PnP-UnNull v3 模型详解