[LeetCode] 1 - Two Sum
문제
- 링크: https://leetcode.com/problems/two-sum/
- 난이도: Medium
- 태그: 배열, 해시 테이블
- 결과:
Time: 0 ms (100%), Space: 14.78 MB (52.19%)
풀이
정렬 + 투포인터 풀이
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int len = nums.size();
vector<pair<int, int>> vp;
vp.reserve(len);
for (int i = 0; i < len; ++i)
{
vp.emplace_back(nums[i], i);
}
sort(vp.begin(), vp.end());
int l = 0;
int r = len - 1;
vector<int> v(2);
while (l < r)
{
int nl = vp[l].first;
int nr = vp[r].first;
int sum = nl + nr;
if (sum == target)
{
v[0] = vp[l].second;
v[1] = vp[r].second;
return v;
}
if (sum > target)
{
r--;
}
else
{
l++;
}
}
v[0] = 1e9 + 1;
v[1] = 1e9 + 1;
return v;
}
};
처음엔 이렇게 풀었다. 문제에서는 인덱스를 반환하기를 요구하기 때문에 pair가 들어가게 되어 난잡해보이는 부분도 있다.
해시맵 풀이
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> v(2);
unordered_map<int, int> m;
for (int i = 0; i < nums.size(); ++i)
{
int num = nums[i];
if (m.contains(target - num))
{
v[0] = m[target - num];
v[1] = i;
return v;
}
m[num] = i;
}
v[0] = -1;
v[1] = -1;
return v;
}
};
AI 기능인 Leet를 통해 다른 접근 방식에 대한 힌트를 받아 작성한 풀이다. 훨씬 더 깔끔하다! nums[i]를 살펴볼 때, target - nums[i]가 nums내에 존재하는지만 빠르게 확인하는 것이다.
댓글남기기