zoukankan      html  css  js  c++  java
  • hdu acm 1425 sort(哈希表思想)

    sort

    Time Limit: 6000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 25803    Accepted Submission(s): 7764


    Problem Description
    给你n个整数,请按从大到小的顺序输出其中前m大的数。
     
    Input
    每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。
     
    Output
    对每组测试数据按从大到小的顺序输出前m大的数。
     
    Sample Input
    5 3 3 -35 92 213 -644
     
    Sample Output
    213 92 3
    Hint
    Hint
    请用VC/VC++提交
     
    Author
    LL
     

    最简单的运用了哈希表的思想的题,开始看了好多关于散列的理论资料,太深奥反而抓不住基本思想。

    基本做法

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 using namespace std;
     5 
     6 bool cmp(int x,int y)
     7 {
     8     return x>y;
     9 }
    10 
    11 int a[1000000];
    12 
    13 int main()
    14 {
    15     int n,k;
    16     while(~scanf("%d%d",&n,&k))
    17     {
    18         for(int i = 0;i<n;i++)
    19         scanf("%d",&a[i]);
    20         sort(a,a+n,cmp);
    21         printf("%d",a[0]);
    22         for(int i = 1;i<k;i++)
    23         printf(" %d",a[i]);
    24         printf("
    ");
    25     }
    26 
    27     return 0;
    28 }


    哈希表思想(空间换时间)

     1 #include <iostream>
     2 #include <cstring>
     3 #include <stdio.h>
     4 using namespace std;
     5 
     6 int hash[1000010];
     7 int main()
     8 {
     9     int i,n,m,t;
    10     while(scanf("%d%d",&n,&m)!=EOF)
    11     {
    12         memset(hash,0,sizeof(hash));
    13         for(i=0;i<n;i++)
    14         {
    15             scanf("%d",&t);
    16             hash[t+500000]=1;
    17         }
    18         int flag=0;
    19         for(i=1000010;i>0;i--)
    20         {
    21             if(hash[i])
    22             {
    23                 printf("%d",i-500000);
    24                 m--;
    25                 if(m)
    26                     printf(" ");
    27             }
    28             if(m==0) break;
    29         }
    30         printf("
    ");
    31     }
    32     return 0;
    33 }


    对比:


    上为哈希表,下为普通做法。可看出差别很大

  • 相关阅读:
    DIV高度设置全屏
    Yii2使用PHPExcel读取excel
    关于linux centos7 vmware 和windows7 文件共享笔记
    mysql rpm包安装
    linux crontab 计划任务脚本
    linux php5.6 安装
    linux上安装php phpredis扩展
    让微信小程序每次请求的时候不改变session_id的方法
    mysql主从配置
    mysql存储过程之游标遍历数据表
  • 原文地址:https://www.cnblogs.com/vivider/p/3702674.html
Copyright © 2011-2022 走看看