news 2026/5/31 22:40:50

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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类型存储,避免溢出错误。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/31 22:34:07

清圣祖 玄烨

一、人物介绍爱新觉罗玄烨&#xff08;1654年&#xff0d;1722年&#xff09;&#xff0c;清朝第四位皇帝、清军入关第二位帝王&#xff0c;年号康熙&#xff0c;庙号圣祖&#xff0c;世称康熙帝。顺治帝第三子&#xff0c;生母为孝康章皇后佟氏&#xff0c;是中国历史上在位时…

作者头像 李华
网站建设 2026/5/31 22:05:02

AMD Ryzen硬件调试终极指南:5分钟掌握SMUDebugTool核心功能

AMD Ryzen硬件调试终极指南&#xff1a;5分钟掌握SMUDebugTool核心功能 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https…

作者头像 李华
网站建设 2026/5/31 22:03:19

RAG :构建测试数据集

为什么需要测试集 凭感觉 RAG 系统由检索&#xff08;Retrieval&#xff09;和生成&#xff08;Generation&#xff09;两个相互耦合的模块组成。调整 chunk 大小、切换 embedding 模型、修改 prompt 等每一项改动都可能以非线性方式影响最终输出质量。 如果没有一套稳定的测…

作者头像 李华
网站建设 2026/5/31 21:56:57

GHelper终极指南:华硕笔记本性能优化与AMD降压超频完整教程

GHelper终极指南&#xff1a;华硕笔记本性能优化与AMD降压超频完整教程 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenboo…

作者头像 李华
网站建设 2026/5/31 21:47:11

Online-disk-direct-link-download-assistant:九大网盘直链解析终极指南

Online-disk-direct-link-download-assistant&#xff1a;九大网盘直链解析终极指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中…

作者头像 李华
网站建设 2026/5/31 21:47:08

论文写作的开挂模式!专业AI论文平台,成稿速度超迅速

作为一名刚完成毕业论文的过来人&#xff0c;我太懂写论文的痛苦了 —— 选题迷茫、文献浩如烟海、框架混乱、查重反复修改、格式调整繁琐、灵感枯竭... 直到我发现了这套 AI 写作工具组合&#xff0c;简直是论文写作的 "开挂神器"&#xff0c;效率直接拉满&#xff…

作者头像 李华