zoukankan      html  css  js  c++  java
  • 数组中未出现的最小正整数(算法)

     1 #include <cstdio>
     2 #include <algorithm>
     3 using namespace std;
     4 int s[100];
     5 int main()
     6 {
     7     int l,r;
     8     int n;
     9     while(scanf("%d",&n),n)
    10     {
    11         for(int i=0;i<n;i++)
    12             scanf("%d",s+i);
    13         l=0;
    14         r=n;
    15         while(l<r)
    16         {
    17             if(s[l]==l+1)
    18                 l++;
    19             else if(s[l]<l+1||s[l]>r||s[s[l]-1]==s[l])
    20                 s[l]=s[--r];
    21                 else
    22                 swap(s[l],s[s[l]-1]);
    23         }
    24         printf("%d
    ",l+1);
    25     }
    26     return 0;
    27 }


    题目:

    给定一个无序数组arr,找到数组中未出现的最小正整数。
    要求:时间复杂度O(n),额外空间复杂度O(1);


    变量的解释
    l:表示从1-l已经存在的数
    r:表示1-r想要得到的数

    初始值:
    l=0
    r=n

    走的过程

    1>当l的位置值等于l+1,表示得到想要的
    2>当l的位置值<l时,表示l位置的值已经存在,所以这个数组不会存在到r的值了 so r--
    3>当l的位置值>r时,表示l的位置已经超过r,所以数组不会存在到r的值了, so r--
    4>当l的位置值和l值的位置-1的的位置值相等时,所以数组不会存在到r的值了,so r--
    5>当l的位置值>l&&<r&&l的位置值和l的位置-1位置不相等时,相互交换直到满足。

    时间复杂度为nlogn的时间复杂度

     1 #include<cstdio>
     2 #include <algorithm>
     3 using namespace std;
     4 int main()
     5 {
     6     int s[100];
     7     int n,c;
     8     while(scanf("%d",&n),n)
     9     {
    10         c=1;
    11         for(int i=0;i<n;i++)
    12             scanf("%d",s+i);
    13         sort(s,s+n);
    14         for(int i=0;i<n;i++)
    15         {
    16             if(s[i]==c)
    17                 c++;
    18             else
    19             {
    20                 if(s[i]>c)
    21                     break;
    22             }
    23         }
    24         printf("%d
    ",c);
    25     }
    26     return 0;
    27 }

    面试的题看起来简单,实则技巧性太强了。

  • 相关阅读:
    ReactNative手势解锁(react-native-ok-gesture-password)
    Android通过DeepLink方式跳转其他App传递参数
    Android中注解的使用
    Windows平台下Flutter安装,配置,初运行。
    Android中MD5加密
    Android中WebView使用全解
    关于windows系统服务的操作
    java:String类型转换
    webservice服务器部署
    webservice生成客户端
  • 原文地址:https://www.cnblogs.com/WDKER/p/5473201.html
Copyright © 2011-2022 走看看