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!

相关推荐
csdn_aspnet3 小时前
C语言 Lomuto分区算法(Lomuto Partition Algorithm)
c语言·开发语言·算法
谙弆悕博士4 小时前
【附C源码】从零实现C语言堆数据结构:原理、实现与应用
c语言·数据结构·算法··数据结构与算法
gaosushexiangji7 小时前
DIC系统推荐:基于千眼狼三维数字图像相关的无人机旋翼疲劳试验全场应变与位移测量
人工智能·算法
小王C语言9 小时前
【线程概念与控制】:线程封装
jvm·c++·算法
圣保罗的大教堂9 小时前
leetcode 796. 旋转字符串 简单
leetcode
kyle~9 小时前
工程数学---点云配准卡布施(Kabsch)算法(求解最优旋转矩阵)
线性代数·算法·矩阵
张二娃同学9 小时前
03_变量常量与输入输出_printf与scanf详解
算法
江南十四行10 小时前
并发编程(一)
java·jvm·算法
z2005093010 小时前
今日算法(依旧二叉树)
算法·leetcode·职场和发展
Zxc_10 小时前
《遗传算法:从自然选择到Rastrigin函数优化,手写一个完整的进化求解器》
算法