피드로 돌아가기
Dev.toBackend
원문 읽기
Two Pointers 도입을 통한 시간 복잡도 O(n²)에서 O(n)으로 최적화
Leetcode 150 | Day 2: Remove Element - Naive vs. Optimized
AI 요약
Context
배열 내 특정 값 제거를 위해 .splice()를 사용하는 Naive 접근 방식의 성능 한계 분석. 요소 삭제 시 발생하는 배열 인덱스 시프트로 인한 불필요한 연산 비용 발생 및 시간 복잡도 증가 문제 식별.
Technical Solution
- Fast Pointer(i)와 Slow Pointer(k)를 활용한 Two Pointers 전략 설계
- Fast Pointer로 전체 배열을 순회하며 삭제 대상이 아닌 유효 데이터 식별
- 유효 데이터 발견 시 Slow Pointer 위치에 값을 덮어쓰는 In-place 업데이트 수행
- 인덱스 시프트를 제거하여 배열 요소 이동에 따른 오버헤드 원천 차단
- 배열의 실제 크기를 수정하는 대신 유효 범위(k)를 반환하여 논리적 제거 구현
.splice()사용 시 발생하는 인덱스 꼬임 방지를 위한i--처리 로직 제거
실천 포인트
1. 배열 요소 삭제 시 `.splice()` 등의 내장 메서드가 내부적으로 O(n)의 시프트를 유발하는지 검토
2. In-place 수정이 필요한 경우 Two Pointers 패턴 적용 가능 여부 확인
3. 물리적 메모리 해제보다 논리적 경계값(k) 반환을 통한 유효 범위 정의 고려