求无序数组中未出现的最小正整数
Posted 绿色代码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求无序数组中未出现的最小正整数相关的知识,希望对你有一定的参考价值。
给定一个无序整型数组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 }
以上是关于求无序数组中未出现的最小正整数的主要内容,如果未能解决你的问题,请参考以下文章