雜湊 hash 練習題

2021-10-21 19:57:09 字數 2732 閱讀 7823

在雜湊這一塊常用的問題包括:判斷<=105個正整數中某m個正整數是否出現過、出現了多少次——宣告bool/int hashtable[maxn] = /。其做法本質是直接將輸入的整數作為陣列的下標來對這個數的性質進行統計,即hash(key)=key直接定址,是最常見也最實用的雜湊應用。複雜一點還有二次對映。把這兩個思想掌握了就差不多了。

本篇文章有的內容來自

樣例輸入 

4 5232

1

樣例輸出	

1beiju

1beiju

用陣列做下標,直接定址hash

#include

intmain

(void);

int student[n+1]

=;for(i=

1;i<=n;i++

)for

(i=1

;i<=n;i++

)printf

("%d\n"

,a[student[i]]-

1);}

}return0;

}

樣例輸入

7 5 31 5 88 67 88 17

5 888 666 666 888 888

樣例輸出

31none

用陣列做下標,直接定址hash

#include

int a[

10005];

intmain

(void);

for(i=

1;i<=n;i++

)for

(i=1

;i<=n;i++)}

if(!flag)

}return0;

}

樣例輸入

they are students.

aeiou

樣例輸出

thy r stdnts.

用陣列做下標,直接定址hash

#include

#include

char s1[

1005

],s2[

1005];

bool hush[

130]=;

intmain

(void

)for

(i=0

;i<

strlen

(s1)

;i++)}

return0;

}

樣例輸入 17

3 2 3 8 8 2 3

1 2 3 2 1 3 1

樣例輸出	

1=2=

3=

解析:這一道題目可以說是集整數雜湊思想於大成,值得仔細分析。

思路:輸入第一行資料,存入data中,同時使用hashtable1去重,將去重後的數存入nums中,並排序。

輸入第二行組別,存入group中,同時使用hashtable2函式去重,將去重後的數存入g中,並排序。

同時,將group和data對應對映到ans中,ans[i][j]中i為分組,j為數。a[i][j]為第i組的j數出現的次數。遍歷輸出。

說白了就是用乙個陣列輸入第一行的數。

再用乙個陣列儲存去重後的數。然後排序。

第二行也是同理的。

最後用乙個對映的二維陣列統計出現的次數。

用陣列做下標,直接定址hash,和二次對映的hash

#include

#include

using

namespace std;

intmain()

;for

(int i =

0; i < n; i++

)//得到最大的數, 方便答案直接對映而不溢位

if(maxcol < data[i]

) maxcol = data[i];}

sort

(nums, nums + len1)

;//資料從小到大存放在nums中, 無重複

//g記錄輸入的組別去重後的資料

int g[

120]

, len2 =0;

//使用雜湊表對group進行存在標識, 以便去重

bool hashtable2[

100100]=

;/*二維答案表,元素ans[g[i]][nums[j]]表示g[i]組中對應的nums[j]出現的次數

ans[i][j], i為分組, j為數, a[i][j]為第i組的j數出現的次數 */

int ans[n +10]

[maxcol +10]

=;for(

int i =

0; i < n; i++)}

sort

(g, g + len2)

;//組別從小到大存放在g中, 無重複

//輸出結果

for(

int i =

0; i < len2; i++

)\n");

}}}return0;

}

python書中練習題 python練習題

1 定義乙個空列表,接收從鍵盤輸入的整數,把列表傳給乙個從大到小排序的函式,再輸出排序後的列表的值 listex b 0 a int input 請輸入列表長度 while b a num int input 請輸入字元 b 1 print listex sum 0 for i in range 0...

python的練習題 Python練習題

1 使用while迴圈輸入1 2 3 4 5 6 8 9 10 i 0while i 10 i i 1 if i 7 continue print i 結果 e python python python test.py1 2 求1 100的所有數的和 i 0sum 0 while i 100 i 1...

練習題 基礎練習

第一題 需求 1 計算 5 個月的生活大概開銷 spending 比如 rent 房租 800.00 mealcost 吃飯 900.00 clothingcosts 買衣服 300.00 othercosts 其他費用 300.00 public class dome1 第二題 需求 2 計算 1...