哈希表(散列表)的基本原理:使用一個(gè)下標(biāo)范圍比較大的數(shù)組來存儲(chǔ)元素,一般通過設(shè)計(jì)一個(gè)函數(shù)(哈希函數(shù),即散列函數(shù)),使得每個(gè)元素的關(guān)鍵字都與一個(gè)函數(shù)值(即數(shù)組下標(biāo))相對(duì)應(yīng),然后用該數(shù)組單元來存儲(chǔ)對(duì)應(yīng)元素。
下面介紹用兩道題目介紹一下hash表的用法:
http://192.168.100.16/showproblem.php?pid=1425
題目描述:給你n個(gè)整數(shù),請按從大到小的順序輸出其中前m大的數(shù)。
Input
每組測試數(shù)據(jù)有兩行,第一行有兩個(gè)數(shù)n,m (0Output
對(duì)每組測試數(shù)據(jù)按從大到小的順序輸出前m大的數(shù)。
這個(gè)問題我們可以看到數(shù)據(jù)量很大而且整數(shù)處于[-500000,500000]之間,那么我們就可以用一個(gè)大的數(shù)組進(jìn)行hash,然后進(jìn)行統(tǒng)計(jì)。
#include "stdio.h"
#include "memory.h"
int a[1000001];
int main()
{
int n,m;
int tmp;
int i;
int count;
int flag = 0;
while(scanf("%d%d",&n,&m)!=EOF)
{
count = 0;
memset(a,0,sizeof(a[0])*1000001);
for(i= 0;i=0;i--)
{
if(a[i]!=0)
{
if(!flag)
{
printf("%d",i-500000);
flag = 1;
}
else
{
printf(" %d",i-500000);
}
count++;
}
if(count==m)
break;
}
printf("\n");
}
return 0;
}
只有注冊用戶登錄后才能發(fā)表評(píng)論。 | ||
【推薦】100%開源!大型工業(yè)跨平臺(tái)軟件C++源碼提供,建模,組態(tài)!
![]() |
||
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
|
||
|