這麼著名的題目都沒見過,演算法小白要努力了!
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...