LeetCode第一題 兩數之和

2021-10-02 18:47:29 字數 1092 閱讀 6037

今天做了leetcode部分第一題,兩數之和,題目是這樣的:

對題目做乙個初步的分析:因為每種輸入只對應乙個答案,也就是說不可能有相同的兩個數,不然就有同一種答案了。

首先想到的是暴力求解的方法,即列出兩個數的每一種組合,然後相加求和,將滿足條件的兩個數的下標輸出,**如下:

是用c語言來實現的。

之後因為涉及查詢的操作,而查詢演算法有七大演算法:順序查詢、二分查詢、插值查詢、斐波那契查詢、數表查詢、分塊查詢和雜湊查詢。

具體可以參考部落格:

而我用的暴力方法明顯是最low的順序查詢,就想著能不能轉為其它的查詢方法。

而雜湊查詢的思路就出來了。

可以先用for迴圈把陣列遍歷一遍,存到hash表中,然後再用target-當前遍歷值,查詢表中是否有對應的數,如果有則方法。

計算一下,這樣的時間複雜度是二分之三n。可以說是o(n)。

而參考了某一位大佬的方法,是別遍歷邊查詢,即遍歷當前數的時候,判斷當前數的另乙個數存不存在,如果存在,則推出,不存在,則把當前數插入hash表中,繼續下乙個數。假設在每乙個數得出結果的概率是n-1分之1,每一次包含查表和插入兩個操作,可以算出平均演算法複雜度為n次,即o(n),和上一種方法差別不大,但這種別插別找的方法確實節省了一些複雜度。

**如下:

上圖是用c++來實現的,如果用c來實現,則要考慮hash表實現注意負值的key,也要考慮,i!=j的情況。如,6的測試用例。

學到的其它知識,c++ map的使用和c++vector的使用技巧。

mapmap;定義map。

map.find(a);查詢鍵值對應的元素值。

map[a] = b;新增鍵值對的方法。

vecortret;定義新的陣列。

ret.push_back(a);陣列內新增元素。

Leetcode 第一題 兩數之和

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

leetcode第一題 兩數之和

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

LeetCode第一題 兩數之和

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