Two Sum 問題 雜湊演算法

2021-09-27 12:53:10 字數 1040 閱讀 5884

這個問題的最基本形式是這樣:給你乙個陣列和乙個整數target,可以保證陣列中存在兩個數的和為target,請你返回這兩個數的索引。

比如輸入nums = [3,1,3,6],target = 6,演算法應該返回陣列[0,2],因為 3 + 3 = 6。

這個問題如何解決呢?首先最簡單粗暴的辦法當然是窮舉了,這個解法非常直接,時間複雜度 o(n^2),空間複雜度 o(1)。

更好一點的解法,可以通過乙個雜湊表減少時間複雜度。

這樣,由於雜湊表的查詢時間為 o(1),演算法的時間複雜度降低到 o(n),但是需要 o(n) 的空間複雜度來儲存雜湊表。不過綜合來看,是要比暴力解法高效的。

實現**如下:

#include #include using namespace std;

// 簡單的暴力搜尋

leetcode 1 two sum 雜湊查詢

題目 給乙個list,給乙個target.問list中哪兩個數的和為target.逐個求差.用map num index儲存資訊.不需要預先把所有的值都放到map中,因為遍歷到a的時候發現map裡面沒有b也沒關係,遍歷到b的時候a就已經在map裡了.class solution object def...

leetcode系列 twosum問題

題目描述 輸入 乙個陣列 nums 乙個數 target 輸出 從陣列中取兩個數使得兩數之和等於target,輸出這兩個數的下標 1,一開始的想法是,使用兩重迴圈直接一一遍歷,窮舉出這兩個數,並得到他們的下標 public static int twosum1 int nums,int target...

由Two Sum問題展開

two sum問題是大多數刷leetcode的小夥伴們遇到的第乙個問題。下面我將從三個方面為各位小夥伴們講述two sum問題。1 two sum問題的描述和解法 2 雜湊表的原理及其應用 3 由two sum問題擴充套件的其他問題的解題思路 1 two sum問題的描述。給定乙個整數陣列 nums...