方法一 :最簡單的暴力兩層迴圈
看了題目,最先想到的是,只要進行兩層迴圈,對所有的數字進行一次相加,當和為target時,將兩個值的index返回即可。
public int twosum(int nums, int target)}}
return indexs ;
}
執行結果,執行用時 480ms,記憶體消耗 29.6mb .
複雜度分析
時間複雜度: o(n^2)
空間複雜度: o(1)
這個方式解基本上算是用時最久的了
方法二 :雜湊表(c# dictionary )
對於方法一的時間複雜度 o(n^2) 不太滿意,我們需要一種更有效的方法來檢查陣列中是否存在目標元素。如果存在,我們需要找出它的索引。保持陣列中每個元素與其索引相互對應的最好方法是 雜湊表。
雜湊表 可以 用空間來換取時間,將查詢時間從o(n)降低為o(1). 雜湊表正是為此目的而構建的,它支援以 近似 恆定的時間進行快速查詢。 這裡用 「近似」來描述,是因為一旦出現衝突,查詢用時可能會退化到o(n)。 但只要仔細的挑選雜湊函式,在雜湊表中進行查詢的用時應當被攤銷為o(1).
c#中, 官方建議雜湊表使用 dictionary 類 來實現。
public int twosum(int nums, int target)
if (!result.containskey(nums[i]))
}
return indexs;
}
執行結果 ,執行用時 280ms,記憶體消耗 30.1mb .
複雜度分析
時間複雜度: o(n)
空間複雜度: o(n)
耗時大大減少
兩數之和,三數之和
兩數之和 方法一 暴力 throw new illegalargumentexception 時間複雜度 o n 2 空間複雜度 o 1 public int twosum int nums,int target throw newillegalargumentexception no twosum...
leetcode 兩數之和與兩數之和
題目描述 給定乙個已按照公升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。說明 返回的下標值 index1 和 index2 不是從零開始的。你可以假設每個輸入只對應唯一的答案,而且你不...
兩數之和 三數之和 四數之和
兩數之和意思就是 給你乙個陣列,從中找出兩個數字,讓他們的和等於乙個具體的target。找到所有這樣的兩個數。並且這兩個數字不能完全一樣。n數之和的意思是 給你乙個陣列,從中找出n個數字,讓他們的和等於乙個具體的target。找到所有這樣的n個數。並且這n個數字不能完全一樣。最基礎的,也是最關鍵的就...