gpt4 book ai didi

java - 如何正确处理max/min int值边缘情况-Java

转载 作者:行者123 更新时间:2023-11-30 06:44:11 26 4
gpt4 key购买 nike

我正在解决 LeetCode 中的一个问题(不是只是练习的面试问题),它提出以下问题:

给定一个排序的整数数组 nums,其中元素范围在包含范围 [lower, upper] 内,返回其缺失的范围。

我想出的代码对于 nums 数组为 [-2147483648,2147483647]lower/upper 的输入失败分别为-2147483648/2147483647。我的代码中实际回答问题的部分是:

if (nums[0]-lower > 1) {
String range = lower + "->" + (nums[0]-1);
ans.add(range);
}
else if (nums[0]-lower == 1) {
String range = new Integer(lower).toString();
ans.add(range);
}
for (int i = 1; i < nums.length; i++) {
if (nums[i] - nums[i-1] > 2) {
String range = nums[i-1]+1 + "->" + (nums[i]-1);
ans.add(range);
}
else if (nums[i] - nums[i-1] == 2) {
String range = new Integer(nums[i]-1).toString();
ans.add(range);
}
}

我想知道如何最好地处理这种边缘情况,不仅是针对这个问题,而且是一般情况。我是否只是在代码中添加额外的 if 语句来专门处理这两个数字(或者如果数字的加法/减法导致 int 值溢出),或者是否有更优雅的方法来处理这个问题?

最佳答案

int 的最大值为 231-1,即 2147483647,但该数字与任何负数之间的差异为大于该数字本身。

因此,所有减法表达式(例如 nums[0]-lower)都会溢出 [-2147483648,2147483647] (或 [-1,2147483647]).

你可以用这个来检查:

System.out.println(2147483647 - -1);

这会打印出 -2147483648,即使您希望它是 2147483648

一个简单的解决方法是将计算作为 64 位 long 进行。如下所示更改所有减法,将表达式转换为 long

if (nums[0] - (long)lower > 1) {

将上面的例子改为:

System.out.println(2147483647 - (long) -1);

这将正确打印 2147483648

关于java - 如何正确处理max/min int值边缘情况-Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51015291/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com