給定乙個整數陣列 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 ...