题解——第k个小的整数

#include <iostream>

#include <cstdio>

#include <algorithm>

using namespace std;

int a[100];

int main()

{

    int n,k;

    cin>>n>>k;

    for(int j=0;j<n;j++)

        cin>>a[j];

    sort(a,a+n);    //左闭右开,一般:(首地址,首地址+元素个数)即可

    int sum=0,i=0;     //引入sum用来去重

    for(i=0;i<n-1;i++)  //i=n-1时,跳出循环

    {

        if(sum==k){

            cout<<a[i-1];

            return 1;

        }

        if(a[i]!=a[i+1])

            sum++;

        if(a[i]==a[i+1])

            ;

    }                   //此时i=n-1;

    if(sum==k){         //因为在i=n-1时跳出,所以倒数第二个还没判断,这里补充判断

        cout<<a[n-2];

        return 1;

    }

    if(a[n-2]!=a[n-1])  //对最后一个元素进行讨论

    {

        sum++;

        if(sum==k){

            cout<<a[n-1];

            return 1;

        }

    }

    cout<<"No";   //前面都没有return,说明数组中没有符合条件的数

    return 0;

}

posted @ 2020-08-13 16:59  py佐料  阅读(123)  评论(0编辑  收藏  举报