算法 Find All Numbers Disappeared in an Array

Posted honpey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法 Find All Numbers Disappeared in an Array相关的知识,希望对你有一定的参考价值。

题目:整数数组满足1<=a[i]<=n(n是数组的长度),某些元素出现一次,某些元素出现两次,在数组a[i]中找到【1,n】区间中未出现的数字。比如输入【4,3,2,7,8,2,3,1】,输出【5,6】。时间复杂度要求是O(n),空间复杂度要求O(1)

思路:看许多网友说用set数据结构去做,这就违反了空间复杂度的要求,所以排序还是要本地做的。遍历数组,把这个数字放到它该待的地方:比如a[0]=4,那么我们就把4放到a[3]处,然后把a[3]处的7放到a[6]处,把a[6]处3放在a[2]处,把a[2]处的2放在a[1]处,晕了吧

这样做:

step1: ,3,2,,8,2,3,1

step2:,3,2,4,8,2,,1

step3:,3,,4,8,2,7,1

step4:,3,4,8,2,7,1 

step4.1:此时想着交换3和3,但是发现重了,那么3还是待在原位吧,

step5:

答案

https://github.com/honpey/codebox/blob/master/leetcode/array/p448.cpp

相关

对于数组1<=a[i]<=n,

 

以上是关于算法 Find All Numbers Disappeared in an Array的主要内容,如果未能解决你的问题,请参考以下文章

Find All Numbers Disappeared in an Array

Find All Numbers Disappeared in an Array

Find All Numbers Disappeared in an Array

Find All Numbers Disappeared in an Array

Find All Numbers Disappeared in an Array

448. Find All Numbers Disappeared in an Array