Leetcode Java Find First and Last Position of Element in Sorted Array
업데이트:
문제
코드
class Solution {
public int[] searchRange(int[] nums, int target) {
int first = this.search(nums, target);
if (first == nums.length || nums[first] != target) {
return new int[] { -1, -1 };
} else {
return new int[] { first, this.search(nums, target + 1) - 1 };
}
}
private int search(int[] nums, int target) {
int low = 0;
int high = nums.length;
while (low < high) {
int mid = (low + high) / 2;
if (nums[mid] < target) {
low = mid + 1;
} else {
high = mid;
}
}
return low;
}
}
결과
설명
-
주어진 문제는 반드시 $O\log n$의 시간 복잡도로 풀어야 하는 조건을 반드시 명심해야 한다.
- 이진 탐색을 통해 주어진 배열 nums 안에 존재하는 target 정수가 존재하는 첫번째 index를 탐색한다.
- 0부터 nums의 길이를 기반으로 절반씩 나누어 target의 index를 탐색한다.
-
첫 탐색 결과 index가 주어진 배열 num의 길이와 같거나, 주어진 배열의 index번째 값이 target과 다른 경우 목표하는 값이 존재하지 않으므로 [-1, -1] 배열을 주어진 문제의 결과로 반환한다.
- 그렇지 않은 경우, 두 번째 이진 탐색을 target + 1 값으로 탐색하고, 반환된 index에 - 1을 하여 마지막 index를 탐색하여 first 값과 해당 index를 배열로 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기