[리트코드] 2563
플랫폼 : https://leetcode.com/
문제 링크 : https://leetcode.com/problems/count-the-number-of-fair-pairs?source=submission-noac
접근 방식
이분탐색과 투포인터를 활용한 방법으로 해결 할 수 있다.
정렬된 배열에서 시작점을 처음으로 잡는다. 이분탐색을 통해 시작점과 끝점을 구한다.
둘의 차를 통해 가능한 조합을 결과에 더한다.
이 과정에서 이분탐색이 핵심이다. 배열의 길이가 최대 10만이기에 완전탐색을 하면 시간복잡도가 O(n^2)이기에 시간초과가 발생한다.
결과
소스 코드
import java.util.*;
class Solution {
public long countFairPairs(int[] nums, int lower, int upper) {
Arrays.sort(nums); // 오름차순 정렬
long answer = 0;
for(int i=0; i<nums.length; i++){
int a = search(nums, lower-nums[i], i+1);
int b = search(nums, upper-nums[i]+1, i+1);
answer+= b-a;
}
return answer;
}
int search(int[] nums, int target, int left){
int right = nums.length;
while(left<right){
int mid = (left+right)/2;
if(nums[mid]<target){
left=mid+1;
}else{
right = mid;
}
}
return left;
}
}
다른 접근 방식
없음.
느낀 점
잊고 있었던 이분탐색을 다시 복습할 수 있어서 좋았다.