題目:給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。
你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。
示例:給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
暴力法:
兩次for迴圈,找出滿足nums[i] + nums[j]=target;的下標i和j
int
*twosum
(int
* nums,
int numssize,
int target,
int* returnsize)}}
return result;
}
雜湊表:
雜湊函式常用除留取餘法:
如何選取合適的p?
設表長為m,取p≤m且為質數
常用解決辦法:用線性探測再雜湊處理衝突
新位置hi=(hash(key)+di) mod m ( 1≤i < m )
其中:m為雜湊表長度
di 為增量序列 1,2,…m-1,且di=i
int
hash
(int key,
int modnum)
int*
twosum
(int
*nums,
int numssize,
int target,
int*returnsize)
index =
(index +1)
% mod;
//處理衝突
} index =
hash
(nums[i]
, mod)
;//第二個加數字於雜湊表的位置
while
(tag[index]==1
) index =
(index +1)
% mod;
hashtable[index]
= nums[i]
; tag[index]=1
;}*returnsize =0;
free
(hashtable)
;free
(tag)
;return ret;
}
力扣1 兩數之和
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9...
力扣 1 兩數之和
方法一 暴力遍歷 時間複雜度o n 2 執行超時 for i in range len nums for j in range i 1,len nums res nums i nums j if res target return i,j 方法二 時間複雜度o n for i in range le...
力扣 1 兩數之和
在該題中 很容易想到用暴力法來解決 直接進行n 2次尋找 此時 時間複雜度很高 而要降低時間複雜度 即減少查詢次數 可以用hashmap 儲存num i i 降低了尋找可能存在的對應數字的次數 mapmap new hashmap for int i 0 i nums.length i for in...