求无序数组中未出现的最小正整数

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 }

 

以上是关于求无序数组中未出现的最小正整数的主要内容,如果未能解决你的问题,请参考以下文章

[算法]数组中未出现的最小正整数

Leetcode刷题Python牛客. 数组中未出现的最小正整数

算法总结之 数组中未出现的最小正整数

未出现的最小正整数

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

线性表练习之Example030-找出数组中未出现的最小正整数