leetcode 刷題(1)--- 兩數之和
阿新 • • 發佈:2018-11-14
給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數。
你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。
示例:
給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
應該注意問題:1.陣列是否可以改變原來順序。2.同樣的元素是否可以被重複利用。3.是否存在多組解。4.時間複雜度。5.空間複雜度。
方法1:利用 map,時間複雜度 O(n),空間複雜度 O(n)。
class Solution {
public:
vector<int
vector<int> result;
map<int, int> num;
for (int i = 0; i<nums.size(); ++i){
if (num.find(target-nums[i]) != num.end()){
result.push_back(num[nums[i]]);
result.push_back(i);
}
else{
num[nums
}
}
return result;
}
};
方法2:先排序,然後利用左右兩個指標遍歷,如果相加之和大於目標值則右指標前移,如果小於則左指標後移,時間複雜度 O(nlogn),空間複雜度 O(1)