码迷,mamicode.com
首页 > 移动开发 > 详细

算法(2) Find All Numbers Disappeared in an Array

时间:2017-04-23 11:58:41      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:本地   array   算法   复杂   输入   bsp   输出   tco   时间复杂度   

题目:整数数组满足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,

 

算法(2) Find All Numbers Disappeared in an Array

标签:本地   array   算法   复杂   输入   bsp   输出   tco   时间复杂度   

原文地址:http://www.cnblogs.com/honpey/p/6751940.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!