我得到了一个连续的数组,例如:
{4,5,7,8,9,10} // missing 6
我应该有效地找到失踪的6。
我想过做二分搜索,检查mid +1,mid -1。
但我一直认为会有这么多基本情况。我一直都在失败......
这应该不是一个很难的问题,但我不知道为什么我这么努力奋斗:/
有人可以指导我完成这个吗?
非常感谢guyz
答案 0 :(得分: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);
答案 1 :(得分:1)
在一个线性传递中找到最小元素,最大元素和所有元素的总和。
知道最小和最大可以计算所有数字的总和(如果没有遗漏)(它是算术级数的总和)。从中减去实际总和将为您提供缺失的数字。