数学专题

算法
算法题
bingoabin

数学

寻找缺失的整数

需求:在一个无序数组里有99个不重复的正整数,范围是1~100,唯独缺 少1个1~100中的整数。如何找出这个缺失的整数?
解法一:Hash表
- 创建一个哈希表,以1到100这100个整数为Key。然后遍历整个数组,每读到一个整数,就定位到哈希表中对应的Key,然后删除这个Key。
- 由于数组中缺少1个整数,哈希表最终一定会有99个Key被删除,从而剩下1个唯一的Key。这个剩下的Key就是那个缺失的整数。 
- 假设数组长度是n,那么该解法的时间复杂度是O(n),空间复杂度是O(n)。
- 这个解法在时间上是最优的,但额外开辟了内存空间,有没有办法降低空间复杂度呢?
解法二:排序,找相邻元素不连续
- 先把数组元素从小到大进行排序,然后遍历已经有序的数组,如果发现某两个相邻元素并不连续,说明缺少的就是这两个元素之间的整数。
- 假设数组长度是n,如果用时间复杂度为O(nlogn)的排序算法进行排序,那么该解法的时间复杂度是O(nlogn),空间复杂度是O(1)。 
- 这个解法没有开辟额外的空间,但是时间复杂度又太大了。有没有办法对时间复杂度和空间复杂度都进行优化呢?
解法三:
- 这是一个很简单也很高效的方法,先算出1+2+3+…+100的和,然后依次减去数组里的元素,最后得到的差值,就是那个缺失的整数。 
- 假设数组长度是n,那么该解法的时间复杂度是O(n),空间复杂度是O(1)。
- 对于没有重复元素的数组,这个解法在时间和空间上已经最优了。但如果把问题扩展一下

扩展问题1:
- 一个无序数组里有若干个正整数,范围是1&#
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 点我我会动 设计师:白松林 返回首页
实付 49.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值