我最近被问到这个问题,我无法想出一个解决方案。有两个int []数组,返回一个包含重叠范围的int []数组。我们可以假设每个数组只包含两个元素。例如:
range1 = [1,50],range2 = [50,100],return [50]
range1 = [1,100],range2 = [50,150],返回[50,100]
range1 = [0,50],range2 = [100,150],返回null
提供的方法签名是:
public static int[] range(int[] range1, int[] range2) { }
我不知道如何在int []数组中返回“null”。
任何帮助将不胜感激。感谢。
这是我的方法:
Arrays.sort(range1);
Arrays.sort(range2);
int[] range = new int[2];
if (range1[1] > range2[0]) {
range[0] = range2[0];
range[1] = range1[1];
} else if (range1[1] == range2[0]) {
range[0] = range1[1];
} else if (range1[1] < range2[0]) {
// Didn't know what to put here
}
return range;
答案 0 :(得分:0)
答案范围的开头是两者中最高的。结局是两者中最少的。如果结果开始大于结果结束,则没有重叠,结果应为null:
public static int[] range(int[] range1, int[] range2) {
int start = Math.max(range1[0], range2[0]);
int end = Math.min(range1[1], range2[1]);
if (start < end) {
return new int[]{start, end};
} else if (start == end) {
return new int[]{start};
} else {
return null;
}
}
答案 1 :(得分:0)
我认为你不需要做最后一次测试,因为如果fisrt条件或第二条件不满足将返回空范围:
int[] range = new int[2];
if (range1[1] > range2[0]) {
range[0] = range2[0];
range[1] = range1[1];
} else if (range1[1] == range2[0]) {
range[0] = range1[1];
}
return range;