一道hash算法题目

发布于 2022-09-03 23:49:35 字数 486 浏览 6 评论 0

题目描述:给你n个整数,请按从大到小的顺序输出其中前m大的数
输入:每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数
输出:对每组测试数据按从大到小的顺序输出前m大的数

这是我的代码:

图片描述

只要一运行就报错,一下是报错的情况:

图片描述

请教大家为什么程序运行不了呢,编译是正确的,十分感谢大家。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

孤君无依 2022-09-10 23:49:35

都说题主的开数组有问题我就把题主的代码放到OJ上去跑一下喽

PS: 题主的输出格式有个坑, 按照让题主理解和修改最小的原则我给你的代码完善了一下

#include <stdio.h>
#define N 500000
int main() {
    int n, m;
    int t[1000001];
    while(scanf("%d%d", &n, &m) != EOF) {
        for(int i = 0; i <= 1000000; i++) {
            t[i] = 0;
        }
        while(n--) {
            int x;
            scanf("%d", &x);
            t[x+N]=1;
        }
        int num=0;
        for (int i = 1000000; i>=0; i--) {
            if (num==m) {
                printf("\n");
                break;
            }
            else if(t[i]==1) {
                printf("%d", i-N); // 这里没有空格了
                num++;
                if (num != m){
                    printf(" "); // 这里是个坑, 因为最后一个输出是没有空格的
                } 
            }
        }
    }
    return 0;
}

HDU
clipboard.png

九度的
clipboard.png


题目都说了, Hash算法, 并不是排序问题.

这题ACM的基础题, 拿输入的数加上500000避免负数当key, value是出现的次数, 如果value在输入的时候就直接做到了排序.

然后输出的时候把只输出value不为0的key就可以了

网上很多答案

http://www.cnblogs.com/acmer-...

你的呼吸 2022-09-10 23:49:35

栈中开这么大的数组?

还有这种考研题不用这样问吧。

请持续率性 2022-09-10 23:49:35

1.把t定义到堆
2.输入n,m之后再判断下大小关系,会不会好点

对不⑦ 2022-09-10 23:49:35

你的数组开得太大,很有可能爆栈。可以尝试用new申请一个数组。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文