<span>第一个缺失的整数</span>

求第一个缺失的整数问题:

给定一个数组A[0...N-1],找到从1开始,第一个不在数组中的正整数。

例如:3,5,1,2,-3,7,14,8;返回: 4。

问题分析:

可以将找到的数放在正确的位置上,如果最终发现某个元素一直没有找到,则该元素即为所求。

假设前 i-1 个数已经找到,并已经正确存放在前 i-1 位。则可以分下面几种情况:

  • A[i] = i, i++;
  • 1<A[i]<i, 丢弃;
  • i<A[i]<N, 当A[i] = A[A[i]], 丢弃;当不等于的时候,交换;
  • A[i]>N, 丢弃。

程序实现:

 1 /***************************************
 2 FileName FindFirstMissingNum.cpp
 3 Author : godfrey
 4 CreatedTime : 2016/5/3
 5 ****************************************/
 6 #include <iostream>
 7 #include <cstring>
 8 #include <vector>
 9 #include <algorithm>
10 #include <stdio.h>
11 #include <stdlib.h>
12 
13 using namespace std;
14 
15 int FindFirstMissingNum(int* A,int size){
16     int i = 1;
17     A --;
18     while(i<=size){
19         if(A[i] == i){
20             i++;
21         }
22         else if((A[i] < i) || (A[i] > size) || (A[i] == A[A[i]])){
23             A[i] = A[size];
24             size --;
25         }
26         else{  // if(A[i] > i)
27             swap(A[i],A[A[i]]);
28         }
29     }
30     return i;
31 }
32 int main()
33 {
34     int a[] = {3,5,1,2,-3,7,14,8};
35     int FirstMissingNum = FindFirstMissingNum(a,sizeof(a)/sizeof(int));
36     cout<<"the FirstMissingNum: ";
37     cout<<FirstMissingNum<<endl;
38     return 0;
39 }

运行结果:

转载请注明出处:

C++博客园:godfrey_88

http://www.cnblogs.com/gaobaoru-articles/

 

全部评论

相关推荐

2024-12-27 23:45
已编辑
三江学院 Java
程序员牛肉:死局。学历+无实习+项目比较简单一点。基本就代表失业了。 尤其是项目,功能点实在是太假了。而且提问点也很少。第一个项目中的使用jwt和threadlocal也可以作为亮点写出来嘛?第二个项目中的“后端使用restful风格”,“前端采用vue.JS”,“使用redis”也可以作为亮点嘛? 项目实在是太简单了,基本就是1+1=2的水平。而你目标投递的肯定也是小厂,可小厂哪里有什么培养制度,由于成本的问题,人家更希望你来能直接干活,所以你投小厂也很难投。基本就是死局,也不一定非要走后端这条路。可以再学一学后端之后走测试或者前端。 除此之外,不要相信任何付费改简历的。你这份简历没有改的必要了,先沉淀沉淀
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务