일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- queue
- axios
- css
- BinaryTree
- c++
- UE5
- routes
- map
- MySQL
- priority_queue
- leetcode
- bit
- component
- DP
- Props
- count
- state
- event
- React
- node.js
- treenode
- 비트연산
- Callback
- array
- route
- Context
- nodeJS
- JSX
- server
- Navigation
- Today
- Total
우사미 코딩
[Leetcode] 15. 3Sum - two pointers를 사용하자 본문
1. 문제링크
3Sum - LeetCode
Can you solve this real interview question? 3Sum - Given an integer array nums, return all the triplets [nums[i], nums[j], nums[k]] such that i != j, i != k, and j != k, and nums[i] + nums[j] + nums[k] == 0. Notice that the solution set must not contain du
leetcode.com
이 주옥같은 문제는 제목부터 맘에 들지 않았지만
이제 이 문제랑 조금 친해졌으므로 "주옥같은" 타이틀을 빼주기로 했다
이 문제는 nums배열에서 3개의 원소의 합이 0이 되는 것들을 찾아야한다.
nums = {-1, 0, 1, 2, 3, -4}; 라면
answer = {{-1, 0, 1}, {1, 3, -4}}가 되겠다
answer안에서의 순서는 신경쓰지 않아도 되고 중복값은 제외한다
2. Two Pointers로 접근하자 - 정렬이 Key Point!
사실상 Three pointers라고 해야 맞을 것 같지만
하나의 포인트는 고정으로 두고 나머지 두 포인터들을 겹치지않게 옮겨가면서 3개의 합이 0이 되는지를 확인해야한다
제일 먼저 해야할 것은 nums를 오름차순으로 정렬한다
초기 포인터 값은 i=0, j= i+1, k = nums.size()-1이다
세 포인터의 합이 0이라면 이걸 answer에 push하고 j포인터는 증가시키고 k포인터는 감소시킨다
세 포인터의 합이 0보다 작다면 j포인터를 하나 증가시킨다
세 포인터의 합이 0보다 크다면 k포인터를 하나 감소시킨다
만약 j가 k보다 크거나 같아진다면 i포인터 값을 하나 증가시킨다. (j = i+1, k = nums.size()-1로 바꿔준다)
3. Solution
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
int i = 0, j = 1, k = nums.size()-1;
set<vector<int>> s;
sort(nums.begin(), nums.end());
int target = 0;
while(i < nums.size()){
while(j < k){
int sum = nums[i] + nums[j] + nums[k];
if(sum == target){
s.insert({nums[i], nums[j], nums[k]});
j++;
k--;
} else if(sum < target){
j++;
} else {
k--;
}
}
i++;
j = i+1;
k = nums.size()-1;
}
vector<vector<int>> v;
for(auto i : s){
v.push_back(i);
}
return v;
}
};
'Leetcode' 카테고리의 다른 글
[Leetcode] 148. Sort List (0) | 2023.05.19 |
---|---|
[Leetcode] 48. Rotate Image - Matrix (0) | 2023.05.19 |
[Leetcode] 153. Find Minimum in Rotated Sorted Array - 주옥같은 binary search (0) | 2023.05.17 |
[LeetCode] 202. Happy Number - 주옥같은 해피넘버 (0) | 2023.05.17 |
[Bit Manipulation] 190. Reverse Bits (0) | 2023.04.19 |