排序-签到题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中的位置。

全部评论

相关推荐

程序员小假:人才
点赞 评论 收藏
分享
逆流河上万仙退:我觉得佬没必要 学历在这里 去了也不会对履历有很大提升 只是有可能让自己更熟练 是我的话会更倾向于找暑期或者中大厂日常
查看13道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务