프로그래밍/알고리즘+코딩테스트
Two Sum
sleepyotter.
2021. 8. 18. 00:27
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> ret;
for(int i=0; i<nums.size(); ++i)
{
for(int j=i+1; j<nums.size(); ++j)
{
if(nums[i]+nums[j]==target)
{
ret.push_back(i);
ret.push_back(j);
return ret;
}
}
}
return ret;
}
};
if문 안에만 return 넣으면 안된다... for문 밖에도 return 넣어줘야 한다.
완전탐색 해야하니 머리 아프게 dp로 풀 필요도 없이 깔쌈하게 2중 for문 돌리면 된다.
혹은 unordered_map을 사용하면 다음처럼도 된다.
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> ans;
unordered_map<int, int> hash_table;
for (int i = 0; i < nums.size(); i++) {
int key = target - nums[i];
if (!hash_table.count(key)) {
// unordered_map search time O(1)
hash_table[nums[i]] = i;
} else {
ans = {hash_table[key], i};
return ans;
}
}
return ans;
}
};
처음에 만약 없다면 key를 nums의 값으로 하고 index를 value로 하여 저장한다. int key 부분을 보면 알겠지만 nums의 값들이 필요한 것이지 idx는 나중에 필요하다. nums의 값이 우선.