LeetCode 雜湊表簡單運用解題

2021-09-26 23:13:59 字數 2010 閱讀 1157

什麼是雜湊表?

雜湊表,是根據關鍵碼值而直接進行訪問的資料結構。
簡單但來說是根據在集合內的所有資料所具有的唯一,確定的屬性,以此為查詢依據,來查詢到,並訪問該資料內容。

例如:乙個學生在學校中的學號是唯一確定的,我們想要了解到該學生的資訊,只需要通過學號的查詢,就可訪問到該學生在學校中的所有資訊。雜湊表的使用原理與之相似。

如何簡單的使用雜湊表

由於筆者也是出於初學階段,僅僅只能通過在leetcode上面所見到的經典題型進行分析。

在遇到此問題時我們所能最直觀的想到的就是通過雙層迴圈,遍歷每一次所出現的字元,在之後是否會出現。這樣的思路對於這道題來說,是可以解決的,但是同時時間複雜度也是很高的,達到了o(n^2)。因此我們所需要做的就是想辦法如何降低時間複雜度。

對於如何降低時間複雜度,我們通過可以建立乙個陣列,通過犧牲空間,來換取時間來達到降低時間複雜度的目的,在上面所說過,雜湊表中需要乙個唯一,確定的屬性來標識不同的資料,對於字元來說,他們不同的屬性就是其ascll碼。眾所周知,字元一共有256個。因此,我們可以申請乙個陣列ascll[256]。用這個陣列來記錄每個字元出現的個數,最終通過對於陣列內容的檢視,就可知道每個字元所出現的次數。

程式實現

int firstuniqchar(char * s);    //建立陣列

char *p = s; //儲存字串首位址

int r = -1;

while(*p != '\0') //單次迴圈記錄每個字元出現的次數

p = s;

while(*p != '\0') //根據字元出現的順序,遍歷出第乙個符合要求的字元

p++;

}return r;

}

通過建立陣列的使用我們可以發現,我們將迴圈的巢狀轉變為了,多次(2次)迴圈。時間複雜度也從o(n^2)減少成為了o(n)。

這道題與第一道題類似,只是將字串換成了陣列。對於這樣道題,最直接的辦法就是將陣列排序,一次從0開始遍歷,找到缺失的那個數字。同樣時間複雜的也是o(n^2)。

這道題同樣我們也可以根據陣列的建立,來找到這個缺失的數字,但是問題在於建立陣列,我們需建立多大的,數字不同於字元,字元的個數是一定的,但數字是無限的,但是通過題目我們可以得到,數字所出現的範圍是n以內,那好我們只需要乙個n大的陣列就完全可以滿足題目要求。

程式實現

int missingnumber(int* nums, int numssize)

for(i = 0; i <= numssize; i++)

free(arr); //記得釋放空間

return i;

}

這道題與第二道題做法類似,但卻略有卻別,我們對於陣列的訪問只是從0號下標到numssize-1,但這道題中,所給的陣列大小,與其中所給的數字並不都滿足這個範圍,因此我們需要格外注意,但辛好題目只要求給出沒有出現最小的正整數,因此在n大的陣列中,沒有出現最小的正整數最大就是n+1。因此我們可以根據這個突破口來找到這個數字。

程式實現

int firstmissingpositive(int* nums, int numssize)

for(i = 1; i <= numssize; i++) //遍歷所建立的陣列,因為是最小正整數,所以我們從1開始遍歷

free(arr); //釋放空間

return i;

}

由於筆者僅僅是初學,所以對於雜湊表的使用有限,僅僅只能通過開闢陣列來達到使用效果。還請各路大佬多多指點。

雜湊表 雜湊表 C語言簡單實現

本文參考自 大話資料結構 通過某個函式f計算出記錄的儲存位置,而不需要通過比較,這就是一種新的儲存技術 雜湊技術。雜湊技術是在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f,使得每個關鍵字key對應乙個儲存位置f key 在查詢時,根據這個確定的對應關係找到給定值key的對映f key 若查...

簡單操作雜湊表

二,雜湊表的簡單操作 在雜湊表中新增乙個key value鍵值對 hashtableobject.add key,value 在雜湊表中去除某個key value鍵值對 hashtableobject.remove key 從雜湊表中移除所有元素 hashtableobject.clear 判斷雜湊...

簡單雜湊表實現

雜湊表定義 雜湊表又稱雜湊表,是根據關鍵碼值 key value 而直接訪問的資料結構。它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式 存放記錄的陣列 叫做雜湊表。雜湊表既有陣列的特點 定址容易 又有鍊錶的特點 方便插入,刪除 雜湊表結構示意圖 下面編寫乙個...