leetcode 452 Arrays.sort()排序整数溢出、Integer.compare(a[1], b[1])成功的问题

一、解决 Arrays.sort() 排序整数溢出问题

1. 为什么会溢出?

Java 中 int 范围:-2³¹ ~ 2³¹-1(-2147483648 ~ 2147483647)。

排序时如果用 (a, b) -> a - b 这种Lambda减法做比较器:

a 是极大正数、b 是极小负数时,a - b 会超出 int 范围,发生整数溢出 ,返回错误的正负值,直接导致排序结果错乱

溢出示例

java 复制代码
int a = Integer.MAX_VALUE;  // 2147483647
int b = -1;
System.out.println(a - b);  // 输出:-2147483648(溢出!本该是正数,结果变成负数)

2. 解决方案(无溢出)

官方推荐Integer.compare(a, b)(底层无减法,纯逻辑判断,绝对安全)

替代方案:强转 long 计算 (long)a - b


二、Lambda表达式 (a,b)->a-bInteger.compare(a,b) 的区别

对比维度 (a, b) -> a - b (Lambda) Integer.compare(a, b)
整数溢出风险 有(极端用例必出错) 无(100%安全)
底层实现 减法运算(数值计算) 纯逻辑判断:x<y?-1:x==y?0:1
代码可读性 差(不直观,易误解) 优(明确表示「整数比较」)
刷题/生产环境 禁止使用(会挂测试用例) 强制使用
适用场景 仅确定数值范围极小时可用 所有场景(通用标准)

极简总结

只要是排序整数,永远用 Integer.compare(),别用减法Lambda!

相关推荐
AI小老六3 小时前
SkillOpt 架构拆解:把 Skill 文本当参数,用执行轨迹训练 Agent
后端·算法·ai编程
胡萝卜术4 小时前
从“分数打架”到“排名投票”:为什么你的ChatBI必须用RRF?
算法·设计模式·面试
Asize4 小时前
初识DFS 与 BFS:递归、队列与图遍历
算法
罗西的思考18 小时前
机器人 / 强化学习】HIL-SERL:人类在环驱动的具身智能进化框架
人工智能·算法·机器学习
美团技术团队21 小时前
LongCat 开源 VitaBench 2.0:长期动态智能体基准新标杆
人工智能·算法
To_OC2 天前
LC 207 课程表:刚学图论那会儿,我连这是拓扑排序都没看出来
javascript·算法·leetcode
To_OC2 天前
LC 208 实现 Trie 前缀树:曾被名字劝退,写完发现是送分题
javascript·算法·leetcode
BadBadBad__AK2 天前
线段树维护区间 k 次方和
c++·数学·算法·stl
_清歌2 天前
DSpark 深度解读:DeepSeek-V4 如何用「半自回归」把推理速度提升 85%
算法