大鹏一日同风起,扶摇直上九万里。这篇文章主要讲述算法 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: 7,3,2,4,8,2,3,1
step2:3,3,2,4,8,2,7,1
step3:2,3,3,4,8,2,7,1
step4:3,2,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】
推荐阅读
- Android双系统实现
- 怎么使用chrome调试andriod app(Hybrid App)
- Android studio上git的使用
- Android跨应用启动
- Android App瘦身实战
- android 过USB-IF測试注意事项及改动
- androidHandlerr.removeCallbacksAndMessages(null)的妙用
- Android之TextView的Span样式源代码剖析
- wpf之StackPanelWrapPanelWrapPanel之间的关系