2015-05-10 52 views
4

我给出一个所谓的连续阵列像这样缺少数:查找整数数组

{4,5,7,8,9,10} // missing 6 

而且我应该高效地寻找失踪的6

我曾想过做的二分查找,并检查中+1,中-1。

但我一直在想会有这么多基础案例。我一直没有...

这不应该是这样一个困难的问题,但我不知道为什么我挣扎这么难:/

有人能指导我这个?

非常感谢guyz

+0

虽然您已经收到了几个可能的答案,但我认为值得注意的是,如果您正在努力使用一种方法,则需要继续找出另一种方法。二进制搜索可能不是他们在那里寻找的东西。解决这个问题有很多技巧,但最简单的理解(恕我直言)涉及单个for循环。 – thesentiment

+0

使用二进制搜索...这是最好的,你可以做...第一章编程珍珠.. – dharam

+1

这个问题的数组是_sorted_,而引用问题中的数组显式洗牌。这允许更快速的二进制搜索解决方案。 –

回答

1

在一个直线传球找到最小的元素,最大的元素,所有元素的总和。

知道最小和最大的你可以计算所有数字的总和,如果没有丢失(这是一个算术级数的总和)。从它减去实际的总和会给你缺少的数字。

2

总是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);