兩數之和 c Dictionary 解法

2021-10-07 22:31:07 字數 987 閱讀 3726

方法一 :最簡單的暴力兩層迴圈

看了題目,最先想到的是,只要進行兩層迴圈,對所有的數字進行一次相加,當和為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個數字不能完全一樣。最基礎的,也是最關鍵的就...