标签:pre 空间 amp int name 代码 整数 break 最小
给定一个无序整型数组arr,找到数组中未出现的最小正整数。要求时间复杂度为O(N),空间复杂度为常数级。
例如:
arr=[33,33,33,33] 返回1
arr=[34,56,45,12] 返回1
arr=[-1,2,3,4] 返回1
arr=[1,2,3,4] 返回5
。。。
随便什么都行
原理很简单,代码用数据跑一遍就看出思想了。
1 #include<iostream> 2 #include<fstream> 3 using namespace std; 4 int main() 5 { 6 ifstream in("test.txt"); 7 int n,i; 8 in>>n;//数组长度,数组元素个数 9 int *arr=new int[n]; 10 for(i=0;i<n;i++) 11 in>>arr[i]; 12 for(i=0;i<n; ) 13 { 14 if(arr[i]!=i+1&&arr[i]>=1&&arr[i]<=n&&arr[i]!=arr[arr[i]-1]) 15 { 16 int temp=arr[arr[i]-1]; 17 arr[arr[i]-1]=arr[i]; 18 arr[i]=temp; 19 //交换后的数据 20 /* 21 for(int j=0;j<n;j++) 22 cout<<arr[j]<<" "; 23 cout<<endl; 24 */ 25 } 26 else 27 i++; 28 } 29 for(i=0;i<n;i++) 30 if(arr[i]!=i+1) 31 { 32 cout<<i+1<<endl; 33 break; 34 } 35 if(i>=n) 36 cout<<n+1<<endl; 37 return 0; 38 }
标签:pre 空间 amp int name 代码 整数 break 最小
原文地址:http://www.cnblogs.com/zhaopeng938/p/7603390.html