001 兩數之和C 版本

2021-10-07 04:19:19 字數 1529 閱讀 1358

vector<

int>

twosum

(vector<

int>

&nums,

int target)}}

return ret;

}

時間複雜度:o(n²) 兩重for迴圈

空間複雜度:o(1) 只用儲存ret

**過程體驗:

開始的時候想用範圍for,但是發現需要返回陣列下下標,而範圍for得到的是size_t型別不能用於下標返回

之後打算使用迭代器,但是迭代器型別對於本題是vector::iterator不能作為下標返回

vector<

int>

twosum

(vector<

int>

&nums,

int target)

//雜湊表尋找對應的值

for(

int i =

0; isize()

; i++)}

return ret;

}

時間複雜度:o(n) 雜湊表查詢為o(1),對n個元素列表遍歷兩次

空間複雜度:o(n) 額外空間儲存雜湊表的n對元素

特別注意事項:

if語句很重要,其中的兩個想與的條件的順序非常重要,必須判斷存在在前

原因:當判斷是否是自身在前的話

如果不存在,會先插入到對應的雜湊表中,插入內容是:差值=0,也就是說雜湊表中value為0的多了乙個,而且就是目標和陣列的差值,這樣的話,當迴圈到 i=1時候能夠得到,把差值又加了乙個,正好組成目標值

具體過程:

第一次迴圈:i = 0 雜湊表插入了 target-nums[0] = 0 但是其自身不行

第二次迴圈:i = 1 雜湊表插入了target-nums[1] =0 滿足了目標值,

即為 one_hash[1] + one_hash[0]

vector<

int>

twosum

(vector<

int>

&nums,

int target)

two_hash[nums[i]

]= i;

//插入雜湊表

}return ret;

}

時間複雜度:o(n) 雜湊表查詢為o(1),對n個元素列表遍歷一次

空間複雜度:o(n) 額外空間儲存雜湊表的n對元素

注意:由於每次遍歷找差值都在之前的雜湊表找,由於遞增,因此輸出的順序要改變一下,先是差值下標,再是i

leetcode題解001:兩數之和

001 兩數之和

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例給定 nums 2 7,11 15 target 9因為 nums 0 nums 1 2 7 9所以...

LeetCode 001 兩數之和

給定乙個整數陣列nums和乙個整數目標值target,請你在該陣列中找出和為目標值的那兩個 整數,並返回它們的陣列下標。輸入 nums 2,7,11,15 target 9 輸出 0,1 解釋 因為 nums 0 nums 1 9 返回 0,1 定義乙個map,key為陣列的值,value為值對應的...

LeetCode題解001 兩數之和

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標 你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9...