当前位置: 首页 > 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.gsyq.cn/news/1436848.html

相关文章:

  • 多张图片转pdf的免费工具推荐?2026图片合并转PDF免费方法汇总 - 科技大爆炸
  • 番茄小说永久保存终极指南:3步构建你的个人数字图书馆
  • 2026手机照片免费转JPG教程!安卓苹果HEIC转JPG不用软件、在线无水印方法
  • 别再用Blender了!用Python这5个库搞定3D建模,从数据处理到打印全流程
  • Redis 常用操作笔记(Go 开发实战)
  • 全国十大猎头公司实测排行:核心能力对比解析 - 得赢
  • 长三角淘宝网店运营服务商综合能力排行盘点 - 资讯纵览
  • Winhance中文版:一站式Windows系统优化与配置管理解决方案
  • 2026EPS转PDF方法大全!Windows/Mac/在线工具及PS/AI转换教程
  • 终极指南:如何快速破解遗忘的压缩包密码
  • Go 语言闭包(Closure)详解
  • 淘宝网店运营服务商排行:知名三家机构实力解析 - 速递信息
  • PnP-UnNull v3 模型详解
  • 清世祖 福临
  • 终极指南:如何用ExplorerPatcher恢复Windows经典界面并提升工作效率
  • 清单来了:盘点2026年风靡全网的的降AIGC工具 - 降AI小能手
  • 掘金量化终端3.0实战:除了跑策略,它的‘量化研究’模块还能帮你做什么?
  • Python测试自动化与CI/CD集成
  • 淘宝网店运营服务商:多家机构核心能力优势 - 速递信息
  • 2026年制造业AI赋能优选服务商盘点:为何说“人才转型”比“工具迭代”更关键? - 速递信息
  • 【Gemini社媒运营黄金窗口期】:错过这5个平台API接入节点,将落后竞品90天
  • 国内高校学生高频使用的AI写作辅助网站有哪些?
  • 单链表超详细精讲|带头节点带头指针双实现 + 核心备份思想 + 完整可运行c语言源码 - Fa-Mian
  • 2026 西安高端酒水上门回收无套路正规实体门店口碑榜单 - 速递信息
  • 抖音下载器终极指南:从零开始掌握批量下载的完整方案
  • 产业转移新版图:中西部10座城市正在接走哪类东部工厂
  • 2026 西安高端酒水回收哪家靠谱 同城高价无套路门店人气榜单 - 速递信息
  • 2026年泉州装修/旧房翻新领域优选服务商深度分析报告 - 速递信息
  • 南京黄金回收商家实力榜 5.31大盘价 + 11 区上门实测,靠谱首选 - 速递信息
  • 为什么你的Gemini微调总失败?92%工程师踩中的4个训练数据陷阱(附可复用清洗脚本)