一道面试题,已到锅里,
昨日面试,有这样一道面试题:一个数组存放数字,无限大,数字不重复,乱序,求解数组中没有的数字。
我说的不是很明了,举例:int[] nums = {3,5,1,2,6,7} ; 这样的一个数组,没有4,考虑数组无限大,问如何高效的找出?
我先说说我当时的回答:先排序Arrays.sort(); 再折半比较数组长度的一半middle和nums[middle],如果相等说明前一半不缺数字,而后在折半比较后一半数,递归查找。不等则在前一半折半比较。
当时觉得自己的答得不错,后来回去在车上想到更简单的一种,不需要先排好序,quickSort有一步,需要找出一个数,然后将大于此数的放它前面,小于的放它后面。返回此数的坐标,这样我们无需整体排序,每次比较此数坐标和数组值,就可确定缺失的数的范围,而后递归直至找出。
只有一个数的比较容易,但如果缺失的数字较多,该如何高效的查找呢?比如少两个,三个数,众人拾柴火焰高,拭目以待。