给定一个未排序的整数数组,让我们求得未出现的最小正整数(要求时间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 }
时间: 2024-10-12 11:02:22