zoukankan      html  css  js  c++  java
  • 第一个缺失的整数

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

    给定一个数组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/

    转载请注明出处: C++博客园:godfrey_88 http://www.cnblogs.com/gaobaoru-articles/
  • 相关阅读:
    Robot Framework-取出接口返回的字段
    利用VBA宏批量解决Word中图片大小、居中设置
    封装和继承
    Shiro的学习
    Redis集群搭建
    Mysql主从架构
    idea修改maven的默认配置不生效
    Mybatis笔记
    【python】文件的读写方法(r;r+;rb;w;w+;wb;a;a+;ab)
    【Python】Xpath语法&示例
  • 原文地址:https://www.cnblogs.com/gaobaoru-articles/p/5456566.html
Copyright © 2011-2022 走看看