這是我寫的第一篇部落格,以前也有過想法,但是總是懶惰,昨晚正好開始刷力扣,就用部落格全程記錄一下吧。刷的第一道題目是兩數之和,題目是這樣的:
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。
示例:給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
我一開始的想法是,取出nums中的每個元素,和target作差就是我們想在nums中查詢的元素,用的是乙個簡單的暴力索搜的思想。會用的兩個for迴圈,外層遍歷取數,內層遍歷查詢外層對應的目標數。類中的函式返回的是vector型別,所以還要設定乙個容積存放結果。將匹配的得到的下標存入容積。
class
solution}}
return result;
//沒有這一句就是錯誤的,原因:一些本應帶有返回值的函式到達結尾後可能並沒有返回任何值}}
;
一開始return的位置是在if中,這樣在不滿足if的條件下,宣告為vector返回型別的函式將沒有返回值,就會報錯。所以應該放在函式內的最外層。在執行時間上這種方法還很不足,顯示用了448ms。
雜湊表儲存key和value,在本題中就是數值和他的位置。想法是,從nums中取出乙個數,計算需要在雜湊表查詢的數。然後在雜湊表中查詢這個數。若能找到記錄nums中的下標和對應數在雜湊表中的value(同樣是定義乙個容積存放結果),也就是位置;若沒有找到則向雜湊表中新增nums中取出的這個數(key和value),遍歷完nums就可以返回結果。
class
solution
maps[nums[i]
]= i;
}return tem;}}
;
雜湊表的方法時間複雜度會小很多,計算時間和消耗記憶體分別為12 ms 10.3 mb ; 448 ms 9.1 mb。
望堅持每天寫一題。
力扣 兩數之和
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9...
力扣 兩數之和
題目很簡單,但是如果用一般的方法,會超出時間限制。所以需要另一種思路,題解給的另一種思路是 查詢表法 有2種實現方法,雜湊表和平衡二叉搜尋樹。因為不需要維護表中元素的順序,所以就用雜湊表。不知道為啥,很奇怪,我自己寫的暴力演算法,第一次測試,系統說超出時間限制,我覺得是我的問題,然後就開始研究,找了...
力扣題庫 兩數之和
你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 題目中已說明只會對應乙個答案,所以先不考慮沒有答案和多個答案的場景。暴力法就是對陣列進行遍歷,檢視...