넘치게 채우기

[LeetCode] 128. Longest Consecutive Sequence 본문

PS/LeetCode

[LeetCode] 128. Longest Consecutive Sequence

riveroverflow 2023. 10. 4. 17:21
728x90
반응형

https://leetcode.com/problems/longest-consecutive-sequence/description/

 

LeetCode - The World's Leading Online Programming Learning Platform

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

문제 유형 : 해시, 배열, (우선순위 큐..?)

문제 난이도 : Medium

 

문제

Given an unsorted array of integers nums, return the length of the longest consecutive elements sequence.

You must write an algorithm that runs in O(n) time.

 

정렬되지 않은 배열 nums가 있습니다. 가장 긴 연속된 수열(1씩 증가하는)의 길이를 구하시오.

선형 시간(O(n))으로 풀어야 합니다.

 

풀이

배열을 한 번 탐색하며, 우선순위 큐에 넣는다.

우선순위 큐에서 값을 빼가며, 수열이 끊길 때까지 임시 배열에 값을 넣어봅니다.

최장 길이를 업데이트하고, 끝나면 다시 시작해봅니다.

큐가 빌 때까지 반복하면, 최장 길이를 반환합니다.

 

코드

C++

class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        ios_base::sync_with_stdio(false);
        cin.tie(nullptr);
        cout.tie(nullptr);
        
        priority_queue<int, vector<int>, greater<int>> pq;
        
        for(const auto& num : nums) {
            pq.push(num);
        }

        int longest = 0;
        while(!pq.empty()) {
            vector<int> sequence;
            while(!pq.empty()) {
                if(sequence.size() == 0) {
                    sequence.push_back(pq.top());
                    pq.pop();
                    continue;
                }
                if(sequence[sequence.size()-1] == pq.top()) {
                    pq.pop();
                } else if(sequence[sequence.size()-1]+1 == pq.top()) {
                    sequence.push_back(pq.top());
                    pq.pop();
                } else {
                    break;
                }
            }
            longest = max(longest, static_cast<int>(sequence.size()));
        }
        return longest;
    }
};
 
728x90
반응형

'PS > LeetCode' 카테고리의 다른 글

[LeetCode] 343. Integer Break  (0) 2023.10.06
[LeetCode] 229. Majority Element II  (0) 2023.10.05
[LeetCode] 706. Design HashMap  (0) 2023.10.04
[LeetCode] 217. Contains Duplicate  (0) 2023.10.04
[LeetCode] 1512. Number of Good Pairs  (0) 2023.10.03