배열의 0번째 인덱스부터 특정 구간까지의 합을 새로운 배열로 정의하는 것. 선형 탐색 대신 구간 합 계산 방식으로 시간 복잡도를 줄임
특징
구현 방식
특정 구간(i~j)의 구간 합 구하기
배열이나 리스트에서 두 개의 포인터(인덱스)를 사용하여 특정 조건을 만족하는 부분 구간을 효율적으로 탐색하는 알고리즘. 일반적으로 배열이나 리스트가 정렬되어 있을 때 사용
특징
왼쪽 포인터 & 오른쪽 포인터를 사용. 이들은 각각 탐색 범위의 시작과 끝을 가리킴
왼쪽 포인터를 고정한 상태에서 오른쪽 포인터를 이동하여 탐색하는 방식
두 개의 포인터를 적절히 이동시키며 시간 복잡도를 최적화할 수 있음
(1) 특정 배열 내에 target 값과 같거나 유사한 부분 합이 몇 개 존재하는지 계산
(2) 배열 내 target = arr[i] + arr[j]를 만족하는 (i, j) 쌍이 몇 개 존재하는지 계산
중첩 반복문의 시간 복잡도 : O(N²)
투 포인터의 시간 복잡도 : O(N)
실행 과정
조건)
구현)
투 포인터 알고리즘과 유사. 배열이나 리스트에서 특정 길이의 특정 조건을 만족하는 구간을 효율적으로 탐색하는 알고리즘. 구간의 넓이가 일정하기 때문에 포인터가 2개일 필요가 없음
특징
핵심은 “중복된 데이터를 다시 계산하지 않고 재사용하는 것”
교집합의 정보는 공유하고, 양쪽 끝 원소만 갱신
(1) 고정 크기 구나 합의 최댓값/최솟값 찾기
(2) 문자열 패턴 탐색 : 아나그램 찾기
중첩 반복문의 시간 복잡도 : O(N²)
슬라이딩 윈도우의 시간 복잡도 : O(N)
실행 과정
조건)
구현)
시간 복잡도를 많이 차지하는 중첩 반복문이 아닌, start&end 포인터를 활용해 O(N)의 시간 복잡도 알고리즘을 구현하는 것