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!

相关推荐
田梓燊4 小时前
力扣:23.合并 K 个升序链表
算法·leetcode·链表
re林檎5 小时前
算法札记——4.27
算法
数据牧羊人的成长笔记5 小时前
逻辑回归与Softmax回归
算法·回归·逻辑回归
郑州光合科技余经理6 小时前
同城O2O海外版二次开发实战:从支付网关到配送算法
开发语言·前端·后端·算法·架构·uni-app·php
d111111111d9 小时前
STM32-UART封装问题解析
笔记·stm32·单片机·嵌入式硬件·学习·算法
Jiangxl~10 小时前
IP数据云如何为不同行业提供精准IP查询与风险防控解决方案?
网络·网络协议·tcp/ip·算法·ai·ip·安全架构
李伟_Li慢慢10 小时前
wolfram详解山峦算法
前端·算法
counting money11 小时前
prim算法最小生成树(java)
算法
澈20711 小时前
C++面向对象:类与对象核心解析
c++·算法
用户6906738819211 小时前
基于无人机的单目测距系统,平均误差仅2.12%
算法