我给出一个所谓的连续阵列像这样缺少数:查找整数数组
{4,5,7,8,9,10} // missing 6
而且我应该高效地寻找失踪的6
我曾想过做的二分查找,并检查中+1,中-1。
但我一直在想会有这么多基础案例。我一直没有...
这不应该是这样一个困难的问题,但我不知道为什么我挣扎这么难:/
有人能指导我这个?
非常感谢guyz
我给出一个所谓的连续阵列像这样缺少数:查找整数数组
{4,5,7,8,9,10} // missing 6
而且我应该高效地寻找失踪的6
我曾想过做的二分查找,并检查中+1,中-1。
但我一直在想会有这么多基础案例。我一直没有...
这不应该是这样一个困难的问题,但我不知道为什么我挣扎这么难:/
有人能指导我这个?
非常感谢guyz
在一个直线传球找到最小的元素,最大的元素,所有元素的总和。
知道最小和最大的你可以计算所有数字的总和,如果没有丢失(这是一个算术级数的总和)。从它减去实际的总和会给你缺少的数字。
总是keep it simple哥们。您始终可以在N时间复杂度下执行此操作。
int[] arr = new int[]{4,5,7,8,9,10};
int missing=0;
for(int i=0;i<arr.length;i++)
{
int x = arr[++i];
int y = arr[i] +1;
if(x != y)
{
missing = y;
break;
}
}
System.out.println(missing);
虽然您已经收到了几个可能的答案,但我认为值得注意的是,如果您正在努力使用一种方法,则需要继续找出另一种方法。二进制搜索可能不是他们在那里寻找的东西。解决这个问题有很多技巧,但最简单的理解(恕我直言)涉及单个for循环。 – thesentiment
使用二进制搜索...这是最好的,你可以做...第一章编程珍珠.. – dharam
这个问题的数组是_sorted_,而引用问题中的数组显式洗牌。这允许更快速的二进制搜索解决方案。 –