排序-签到题I

题目

https://ac.nowcoder.com/acm/problem/25519 alt


code

#include <stdio.h>
int main()
{
    int n,k,i,sum=0;
    scanf("%d%d\n",&n,&k);
    int a[n];
    int b[100001]={0};
    for(i=0;i<n;i++) 
    {
        scanf("%d",&a[i]);
        b[a[i]]++;
    }
    for(i=0;i<100001;i++)
    {
        sum+=b[i];
        if(sum>=k) 
        {
            printf("%d",i);
            break;
        }
    }
    
}

解题思路

用另外一组数组b,来计算a数组中数出现的次数,同时a数组中数字的大小,也决定了在b数组中的位置;而后通过sum将b数组相加,即将a数组出现的次数相加,再将sum与k比较,大于等于k则表示第k小的数字,输出i(在b数组中,i数表示第i位数,在a数组中表示,a[i]的大小)。


利用b数组,表示a[i]出现的次数,同时决定了a[i]在b中的位置。

全部评论

相关推荐

04-17 18:32
门头沟学院 Java
野猪不是猪🐗:他跟你一个学校,你要是进来之后待遇比他好,他受得了?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务