leetcode 1 Two sum(兩數相加)
阿新 • • 發佈:2018-12-31
題目要求
給定一個整數陣列,返回兩個數字的索引,使它們加起來成為一個特定的目標。
假設每個輸入只有一個解決方案,並且不會兩次使用相同的元素。
輸入示例
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
思路
1、暴力遍歷,兩層。能找到答案,但是時間複雜度較高。
2、使用雜湊表,根據 nums[i] + nums[j] = target,當前遍歷元素已知是nums[i],且目標target已知,所以只要判斷**nums[j]**即可。如果nums[j]在雜湊表中,那麼返回i,j的索引, 否則把[ nums[j], j ] 加入到雜湊表中,形式為本身元素為key,元素的索引下標為value。
主要程式碼 c++
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> map; // 構建雜湊表,unordered_map的實現就是雜湊
vector<int> ans;
for(int i=0;i<nums.size();++i)
{
int complement = target - nums[i];
if (map.count(complement)>0) // 如果“nums[j]”在雜湊表中
{
ans.push_back(map[complement]); // 返回“nums[i],nums[j]”的索引,即整數的下標
ans.push_back(i);
return ans;
}
map.insert(make_pair(nums[i],i)); // 雜湊表的儲存形式:key(整數):value(整數對應的下標)
}
return ans;
}
};