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 | 31 |
Tags
- leetcode
- Climbing Stairs
- React 리렌더링 최적화
- 알고리즘
- React 성능 최적화 방법
- DaleStudy
- 스쿼드조직
- 협업문화
- RxJS 변환 오퍼레이터
- RxJS 결합 오퍼레이터
- RxJS 함수형 프로그래밍
- 달래스터디
- leedcode
- 개발자커뮤니케이션
- contains duplicate
- RxJS 생성 오퍼레이터
- React useCallback 사용법
- RxJS 마블 다이어그램
- React useMemo 사용법
- React hooks 남용 사례
- RxJS 에러 처리
- useCallback 성능 최적화
- Blind75
- 자바스크립트 고차 함수 vs Observable
- RxJS 오퍼레이터
- React useEffect 안티패턴
- RxJS 멀티캐스팅
- useMemo 성능 최적화
- Observable vs Array
- 알고리즘스터디
Archives
- Today
- Total
수쿵의 IT월드
DaleStudy | Leetcode Study 1주차 - Longest Consecutive Sequence 본문

문제
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.
Example 1:
Input: nums = [100,4,200,1,3,2]
Output: 4
Explanation: The longest consecutive elements sequence is [1, 2, 3, 4]. Therefore its length is 4.
Example 2:
Input: nums = [0,3,7,2,5,8,4,6,0,1]
Output: 9
Example 3:
Input: nums = [1,0,1,2]
Output: 3
Constraints:
- 1 <= nums.length <= 10^5
- -10^9 <= nums[i] <= 10^9
풀이
이 문제는 배열에 연속된 숫자가 몇 번이나 반복되는지 확인하는 문제인데, 여기서 생각해야할 부분은 연속된 숫자의 모음이 한 번만 존재하는 것이 아니라 여러번 존재할 수 있기 때문에 Math.max를 사용해서 비교해야한다는 점이다. 그리고 문제에서는 unsorted라고 작성되어 있기 때문에 이 부분은 "정렬을 한 뒤에 구현해라" 라고 힌트를 주는 것이다.
예시 3번을 보면 1에서 1으로 가는 부분은 연속된 숫자의 모음으로 정의하지는 않지만, 그래도 연속되었다고 정의하는 것으로 볼 수 있다. 즉, 3가지로 경우의 수를 나눠볼 수 있다.
| 연속의 유무 | 숫자 증가 | |
| 같은 수 | 연속 O | 증가 X |
| 연속된 수 | 연속 O | 증가 O |
| 그 외 | 연속 X | 증가 X |
function longestConsecutive(nums: number[]): number {
if (!nums.length) return 0;
nums.sort((a, b) => a - b);
let longest = 1;
let currentStreak = 1;
for (let i = 1; i < nums.length; i++) {
if (nums[i] === nums[i - 1]) continue;
if (nums[i] === nums[i - 1] + 1) {
currentStreak++;
} else {
longest = Math.max(longest, currentStreak);
currentStreak = 1;
}
}
return Math.max(longest, currentStreak);
};
currentStreak가 0부터 시작하는 것이 아니라 1부터 시작하는 이유는, 현재의 원소 포함해야하기 때문에 1부터 시작하는 것이다. 0부터 시작하게 되면 항상 1이 부족하게 만들어지게 된다.
Link: https://leetcode.com/problems/longest-consecutive-sequence/