码迷,mamicode.com
首页 > 编程语言 > 详细

数组中未出现的最小正整数

时间:2015-09-06 06:20:36      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

给定一个未排序的整数数组,让我们求得未出现的最小正整数(要求时间o(n)空间复杂度o(1))

如果一般的方法,应该是先排序,然后遍历的时候直接找到正整数,但是排序最小也要o(n*log(n))的复杂度。这里运用了夹逼的办法(代码如下)

 1 void swap(int &a,int &b)
 2 {
 3  int temp = a;
 4   a = b;
 5   b =temp;
 6 
 7 
 8 }
 9 int Number(int *arr,int size)
10 {
11  int r = size;
12  int l = 0;
13  while(l<r)
14  {
15    if(arr[l]==l+1)
16    {
17      l++;
18    }
19    else if(arr[l]<l+1||arr[l]>r||arr[arr[l]-1]==arr[l])
20    {
21     arr[l] = arr[--r];
22    }
23    else
24    {
25     swap(arr[arr[l]-1],arr[l]);
26    }
27  }
28  return l+1;
29 
30 }

 

数组中未出现的最小正整数

标签:

原文地址:http://www.cnblogs.com/morebeauty/p/4784341.html

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