从一个无序数组中找出缺少的值。

来源:互联网 发布:js 滚动延迟加载 编辑:程序博客网 时间:2024/05/02 00:21

题目:一个无序数组里有n-1个不重复正整数,范围从1到n,唯独缺少一个整数。如何找出这个缺失的整数?

解法一:

创建一个HashMap,以1到n为键,值都是0 。然后遍历整个数组,每读到一个整数,就找到HashMap当中对应的键,让其值加一。

由于数组中缺少一个整数,最终一定有n-1个键对应的值等于1, 剩下一个键对应的值等于0。遍历修改后的HashMap,找到这个值为0的键。

假设数组长度是N,那么该解法的时间复杂度是O(1),空间复杂度是O(N)。


解法二:

先把数组元素进行排序,然后遍历数组,检查任意两个相邻元素数值是否是连续的。如果不连续,则中间缺少的整数就是所要寻找的;如果全都连续,则缺少的整数不是1就是n

假设数组长度是N,如果用时间复杂度为O(N*LogN)的排序算法进行排序,那么该解法的时间复杂度是O(N*LogN),空间复杂度是O(1)。


解法三:

很简单也很高效的方法,先算出1+2+3….+n的和,然后依次减去数组里的元素,最后得到的差,就是唯一缺失的整数。

假设数组长度是N,那么该解法的时间复杂度是O(N),空间复杂度是O(1)。




0 0
原创粉丝点击