在陣列中找出和為目標值的兩個整數,並返回他們的下標

2021-09-25 04:20:16 字數 968 閱讀 4467

問題:

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。

你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。

方法一:暴力破解

暴力破解方法很簡單,遍歷每個元素x,並查詢是否存在乙個值與target-x相等的目標元素。

複雜度分析:時間複雜度我io(n2),對於每乙個元素我們都試圖遍歷陣列其他元素來尋找所對應的目標元素,這將耗費o(n)時間。

空間複雜度:o(1)

方法二:兩遍雜湊表

為了對執行時間複雜度進行優化,我們需要一種更有效的方法來檢查陣列中是否存在目標元素,如果存在,我們需要找出它的索引。保持陣列中的每個元素與其索引相對應的最好解決方案是什麼呢?雜湊表

通過以空間換取速度的方式,我們可以將查詢時間從o(n)降低到o(1)。雜湊表正是為此目的而構建的,它支援以近似恆定的時間進行快速查詢。我用「近似」來描述,是因為一旦出現衝突,查詢用時可能會退化成o(n)。但只要你仔細的挑選雜湊函式,在雜湊表中進行查詢的用時應當被攤銷為o(1)。

乙個簡單的實現使用了兩次迭代。在第一次迭代中,我們將每個元素的值和它的索引新增到表中。在第二次迭代中,我們檢查每個元素對應的目標元素(target-nums[i])是否存在在表中。

複雜度分析:時間複雜度o(n),我們把n個元素的列表遍歷兩次。由於雜湊表將時間複雜度縮短到o(1),所以總體時間複雜度為o(n)

空間複雜度:o(n),所需的額外空間取決於雜湊表中儲存的元素數量,該表中儲存了n個元素

方法三:一遍雜湊表

事實證明,我們可以一遍完成,在進行迭代將元素插入到表中的同時,我們還會回過頭來檢查是否已經存在當前元素所對應的目標元素,如果存在,我們則找到了對應的解,立即將其返回。

時間複雜度:o(n),我們只遍歷了n個元素的列表一次。在列表中每次查詢只花費o(1)的時間

空間複雜度:o(n),所需的額外空間取決於雜湊表中儲存元素的數量

The six Day 陣列中找出和為目標值

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

leetcode 找兩個和為目標值且不重疊的子陣列

給你乙個整數陣列 arr 和乙個整數值 target 請你在 arr 中找 兩個互不重疊的子陣列 且它們的和都等於 target 可能會有多種方案,請你返回滿足要求的兩個子陣列長度和的 最小值 請返回滿足要求的最小長度和,如果無法找到這樣的兩個子陣列,請返回 1 示例 1 輸入 arr 3,2,2,...

陣列中和為目標值的兩數的下標

題目描述 給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 返回 0,1 思路1 第一層for迴圈從索引0到倒數第二個索引拿到每個陣列元素,第二個for迴圈遍歷上一層f...