LeetCode (1)兩數之和

2021-10-21 10:18:43 字數 2055 閱讀 9667

給定乙個整數陣列 nums 和乙個整數目標值 target,請你在該陣列中找出 和為目標值 的那 兩個 整數,並返回它們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。你可以按任意順序返回答案。

示例1:

輸入:nums = [2,7,11,15], target = 9

輸出:[0,1]

解釋:因為 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例2:

輸入:nums = [3,2,4], target = 6

輸出:[1,2]

示例3:

輸入:nums = [3,3], target = 6

輸出:[0,1]

給定了乙個陣列nums和乙個數值target,需要從陣列中取兩個數,當其和與target的值相等,輸出其下標。可以有兩種方法實現:

1、暴力列舉:選定第乙個數,然後從第二個數開始依次與第乙個數相加求和與target值進行比較,若相等則輸出下標,不相等則繼續執行,最後找不到符和條件的兩個數值輸出空值。(時間複雜度為o(n

2)o(n^2)

o(n2

),空間複雜度為o(1

)o(1)

o(1)

)2、雜湊表:選定第乙個數,然後用hashtable的find函式尋找target與第乙個數的差值相等的數,找到後返回兩個數的下標,否則選定的第乙個數下標右移,繼續執行。(時間複雜度為o(n

)o(n)

o(n)

,空間複雜度為o(n

)o(n)

o(n))

源程式:

/*

問題:輸出nums陣列中兩數之和等於target的下標

*/#include

#include

#include

using

namespace std;

//1、暴力列舉方法

class

solution_1;}

}}return;}

};//2、雜湊表方法

class

solution_2;}

hashtable[nums[i]

]= i;

}return;}

};intmain

(int argc,

char

*ar**)

;int target =9;

//1、暴力列舉方法

solution_1 s1;

vector<

int>

res_1

(s1.

twosum

(nums, target));

vector<

int>

::iterator ite_1 = res_1.

begin()

;for

(; ite_1 != res_1.

end(

); ite_1++

) cout <<

*ite_1<<

" ";

cout << endl;

//2、雜湊表方法

solution_2 s2;

vector<

int>

res_2

(s2.

twosum

(nums, target));

vector<

int>

::iterator ite_2 = res_2.

begin()

;for

(; ite_2 != res_2.

end(

); ite_2++

) cout <<

*ite_2 <<

" ";

return0;

}

執行結果:

LeetCode 1 兩數之和

給定乙個整數數列,找出其中和為特定值的那兩個數。你可以假設每個輸入都只會有一種答案,同樣的元素不能被重用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 step 1 class solution object def tw...

leetcode 1 兩數之和

1.兩數之和 這道題和程式設計之法上面的題目有以下幾個不同 1 題目所給定的陣列是無序的,程式設計之法裡面是預設有序的 2 要求輸出原陣列的序號,如果用乙個結構體維護陣列下標,那麼需要o n 的空間,顯然不是最好的方法 3 題目中包含負數,之前想用數值直接表示陣列下標,陣列值為原來的真正陣列下標,但...

leetcode 1 兩數之和

給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 class solution for int i 0 ...