搜尋

首頁  >  問答  >  主體

c++ - 一道hash算法题目

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

这是我的代码:

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

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

怪我咯怪我咯2808 天前579

全部回覆(4)我來回復

  • 黄舟

    黄舟2017-04-17 14:46:13

    都說題主的開數組有問題我就把題主的程式碼放到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

    九度的


    題目都說了, Hash演算法, 並不是排序問題.

    這題ACM的基礎題, 拿輸入的數加上500000避免負數當key, value是出現的次數, 如果value在輸入的時候就直接做到了排序.

    然後輸出的時候把只輸出value不為0的key就可以了

    網路上很多答案

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

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 14:46:13

    堆疊中開這麼大的陣列?

    還有這種考試研究題不用這樣問吧。

    回覆
    0
  • 黄舟

    黄舟2017-04-17 14:46:13

    1.把t定義到堆疊
    2.輸入n,m之後再判斷下大小關係,會不會好點

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 14:46:13

    你的陣列開得太大,很有可能爆棧。可以嘗試用new申請一個陣列。

    回覆
    0
  • 取消回覆