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!

相关推荐
江畔柳前堤2 小时前
大语言模型分布式训练:从并行策略到万卡工程的系统梳理
人工智能·分布式·深度学习·算法·目标检测·机器学习·语言模型
Forever Nore3 小时前
LeetCode 4 寻找两个正序数组的中位数 - 二分
算法·leetcode
罗西的思考4 小时前
【OpenClaw具身硬件】MiniClaw 阅读笔记---(1)基础
人工智能·算法·机器学习
蛋先生DX5 小时前
大模型参数存储格式揭秘:BF不是男朋友
深度学习·算法·llm
爱跳舞的烤冷面6 小时前
自学嵌入式第22天(数据结构——哈希)
数据结构·算法·哈希算法
猎嘤一号6 小时前
博弈论(Game Theory)的理论、算法与工程
人工智能·算法·安全·博弈论
月光船幽幽6 小时前
影子模式下保护 logits 不被修改
人工智能·python·算法
马拉AI6 小时前
腾讯开源 Agent 记忆系统,AI“换对话就忘”的问题有了新解法(附安装使用教程)
人工智能·算法·开源·科研
地平线开发者8 小时前
征程6工具链模型X86推理方式说明
算法
地平线开发者8 小时前
【征程6】校准量化中HistogramObserver解析
算法