演算法 Two sum之hash表解決方法

2021-08-16 01:12:39 字數 2058 閱讀 6895

這麼著名的題目都沒見過,演算法小白要努力了!

two sum即給出一組數,找出其中兩個之和為某一特定值的索引。

python:

def

findtwosum

(inputlist, sumoftwo):

aimdic = dict()

result = [-1, -1]

for num in inputlist:

if num in aimdic.keys():

#返回找到的兩個值

#result[0]=aimdic[num]

#result[1]=num

#返回找到的兩個值的序號

result[0] = inputlist.index(aimdic[num])

result[1] = inputlist.index(num)

print("find two: ",result[0], result[1])

return result

else:

aimdic[sumoftwo - num] = num

print("not find two sum!")

return result

if __name__ == "__main__":

rst = findtwosum([1,5,3,7,2,9,6,11], 18)

c語言:

#include 

#include

#include

//用hash表解決在給定的一列數中找到兩個之和為某一給定值得問題

int*sumtwo(int

*numlist, int len, int target)

int min=2147483647,i=0,hashlen=0;

int * hashtbl = null;

int * index = (int

*)malloc(2

*sizeof(int)); //存放輸出結果

//找到最小數,用來確定hash表長度

for(i=0;iif(min > numlist[i])

min = numlist[i];

}

if(min == 2147483647)

hashlen= target-min+1;

printf("hashlen:%d\n",hashlen);

hashtbl = (int

*)malloc(hashlen*sizeof(int));

//初始化hash表

for(i=0;i1;

}for(i=0;i//printf("target-numlist[i]=%d\n",target-numlist[i]);

if((target-numlist[i]>0)&&(hashtbl[target-numlist[i]] != -1))

else

hashtbl[numlist[i]]=i;

//printf("hashtbl[%d]=%d\n",numlist[i],i);

}printf("fail to find two sum is equal to target\n");

return null;

}int main () ;

int sum=16;

int leninput=sizeof(nums)/sizeof(nums[0]);

printf("leninput:%d\n",leninput);

int*twoindex=sumtwo(nums,leninput,sum);

if(twoindex!=null)

clockend=clock();

cost=(double)(clockend-clockstart)/clocks_per_sec;

printf("clockstart:%ld,clockend:%ld,cost %ld seconds\n",clockstart,clockend,cost);

return

0;}

Two Sum 問題 雜湊演算法

這個問題的最基本形式是這樣 給你乙個陣列和乙個整數target,可以保證陣列中存在兩個數的和為target,請你返回這兩個數的索引。比如輸入nums 3,1,3,6 target 6,演算法應該返回陣列 0,2 因為 3 3 6。這個問題如何解決呢?首先最簡單粗暴的辦法當然是窮舉了,這個解法非常直接...

《演算法導論》之hash表

hash表原理不難,難在如何選擇表的大小以及hash函式,這個涉及到很多數學的東西,這裡就先不詳述了,而是先整理下基本概念和一些結論。hash就是通過函式,將大範圍的key值對映到小範圍的hash表中,相比起直接對映來說更加節省空間。而這種方法的乙個問題就是會出現 碰撞 即有多個值會對映到同乙個 項...

hash表 hash演算法

概念 雜湊表 hash table。也叫雜湊表 是依據關鍵碼值 key value 而直接進行訪問的 資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。給定表m,存在函式f key 對隨意給定的keyword值ke...