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!

相关推荐
aramae5 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
荆棘鸟智能5 小时前
城市感知设备怎么统一接入?从多协议网关到设备模型的中间件架构设计
人工智能·算法·边缘计算
INGNIGHT9 小时前
270 · 电话号码的字母组合II(Trie)
linux·算法
2401_839080549 小时前
C++常见八股
数据结构·c++·算法
青山是哪个青山10 小时前
LeetCode 188:买卖股票的最佳时机 IV
算法
mikuyyds10 小时前
geo-toolbox 插件算法解析:RUSLE 与 MUSLE 的工程化落地
算法·rust·gis
Tisfy10 小时前
LeetCode 3498.字符串的反转度:一次遍历
leetcode·字符串·题解·遍历
a1879272183110 小时前
【算法】树(二):队列与祖先——BFS 骨架三配件、短路透传与合流
算法·leetcode·二叉树··bfs·算法讲解·树遍历
syagain_zsx11 小时前
算法基础篇 · 03 枚举(C++ 题解)
c++·算法·二进制·枚举
weixin_3077791311 小时前
C++代码实现MATLAB中的ode23tb函数功能
开发语言·c++·算法·matlab