力扣 NO 1 兩數之和

2021-10-12 02:12:41 字數 1244 閱讀 4331

題目:給定乙個整數陣列 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...