[POINTER] Two Pointer
[POINTER] Two Pointer
- Sliding Window라고도 불린다.
- 완전 탐색으로 해결하려면 시간 초과가 날 수도 있는데, 그 대안으로 쓰이기도 한다.
1차원 배열에서 각자 다른 원소를 가리키는 두 개의 포인터를 조작해 원하는 것을 얻는 형태.
- 구간 합 및 백준 # 18870(좌표 압축)에서 내가 사용한 중복 원소 제거 등에서 시간 복잡도를 O(n)으로 모든 배열의 원소를 훑어볼 수 있다.
구현 내용(중복 원소 제거)
- 배열이 정렬되어있다 가정하자.
- arr_ptr = 0;
- for arr_cnt = 1 to arr_len - 1
- arr[arr_ptr] != arr[arr_cnt]
- arr[++arr_ptr] = arr[arr_cnt]
- arr[arr_ptr] != arr[arr_cnt]
- 이후 arr_ptr을 arr_len으로 참고할 수 있다!
구현 내용(수들의 합, 백준 2003)
- n = arr_len, m = target
- front_ptr = 0, sum = 0, m_case = 0
- for rear_ptr = 0 to n - 1
- sum += arr[rear_ptr]
- m < sum ?
- while m < sum
- sum -= arr[front_ptr++]
- while m < sum
- m == sum ? m_case++
This post is licensed under CC BY 4.0 by the author.