Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- ansible
- 자바스크립트
- event loop
- K8S
- YAML
- FastAPI
- IAM
- asgi
- Service
- leetcode
- terraform
- github
- Python
- POD
- dockerfile
- docker
- elasticsearch
- AWS
- Deployment
- asyncio
- EC2
- EKS
- IAC
- kernel
- Django
- 쿠버네티스
- Kubernetes
- ebs
- WSGI
- intervals
Archives
- Today
- Total
궁금한게 많은 개발자 노트
[ leetcode ] 128. Longest Consecutive Sequence 본문
해당 문제는 숫자로 이루어진 배열에서, 순서와 상관없이 배열 내 숫자 중 연속되어 증가하는 숫자들이 존재하는 것들 중 가장 긴 길이를 반환하는 문제입니다.
예를 들면 [100, 4, 200, 1, 3, 2]의 배열에서는 1,2,3,4가 연속하며 증가하는 가장 긴 숫자들이므로 4가 정답입니다.
이 문제를 해결하기 위해서는 우선 배열을 오름차순으로 정렬하고 나서 보면 연속되는 부분 배열들을 살펴보면 1,2,3,4와 100 그리고 200 이렇게 세 부분 배열로 나눌 수 있습니다.
이 경우에 각 시작점의 특징은 해당 숫자보다 -1인 숫자가 배열 내에 존재하지 않는다는 특징이 있습니다.
그래서 -1인 숫자가 배열에 존재하지 않으면 시작점으로 판단하고 하나씩 증가시키며 배열에 존재할 때까지의 길이를 비교하며 제일 긴 길이를 반환하면 되는 문제입니다.
배열의 숫자들을 모두 set자료 구조에 넣고, for문으로 배열을 순회하면서 해당 숫자 -1이 없으면 시작점이라고 판단하여 set에 해당 숫자에서 +1씩하며 존재하는지 판단하여 길이를 구합니다.
#include <set>
#define max(a, b)((a) > (b) ? (a) : (b))
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
set<int> numSet(nums.begin(), nums.end());
int answer = 0;
for (auto num : nums) {
if (!numSet.count(num - 1)) {
int length = 0;
while (numSet.count(num + length)) length++;
answer = max(answer, length);
}
}
return answer;
}
};
'Algorithm' 카테고리의 다른 글
[ leetcode ] 146. LRU Cache (0) | 2023.07.19 |
---|---|
[ leetcode ] 445. Add Two Numbers II (0) | 2023.07.17 |
[ leetcode ] 334. Increasing Triplet Subsequence (0) | 2023.07.17 |
[ leetcode ] 1218. Longest Arithmetic Subsequence of Given Difference (0) | 2023.07.14 |
[ leetcode ] 198. House Robber (0) | 2023.07.14 |
Comments