• 第一个缺失的整数


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

    给定一个数组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/
  • 相关阅读:
    Linux下安装Readis
    windows下的Redis安装:
    解决@ResponseBody不能和 <mvc:annotation-driven>同时使用的问题
    dom4j操作XML
    Ajax优缺点
    来一打前端博客压压惊
    tinypng upload一键压缩上传工具,告别人肉
    手把手教你撸一个简易的 webpack
    前端路由简介以及vue-router实现原理
    JS 数据类型、赋值、深拷贝和浅拷贝
  • 原文地址:https://www.cnblogs.com/gaobaoru-articles/p/5456566.html
Copyright © 2020-2023  润新知