공부/알고리즘

Two Pointer

확두뇌 2023. 12. 2. 16:46

- 정렬과 투포인터

input: nums = {4,1,9,7,5,3,16}, target: 14 output: True

nums의 두 숫자를 더해서 target을 만들 수 있으면 True 출력.

 

1. 우선 nums를 오름차순 정렬하기

 nums.sort()

{1,3,4,5,7,9,16}

2. 인덱스 l과 r을 정한다

int l = 0;

int r = nums.length-1;

3. while (l<r) 배열을 돌면서 두 수를 더해보고 값이 다르면 인덱스를 바꾼다.

nums[l] + nums[r] > target ==> r-1. 큰 값을 줄이기

nums[l] + nums[r] < target ==> l+1. 작은 값을 늘리기

4. nums[i]+nums[r] == target ==> return true;

배열을 돌다가 i==r이 되면 return false;

 

시간복잡도: O(nlogn)