Description
정렬된 배열안에서 원하는 값을 찾는 문제입니다.
Given an array of integers nums which is sorted in ascending order, and an integer target, write a function to search target in nums. If target exists, then return its index. Otherwise, return -1.
You must write an algorithm with O(log n) runtime complexity.
Example 1:
Input: nums = [-1,0,3,5,9,12], target = 9
Output: 4
Explanation: 9 exists in nums and its index is 4
Example 2:
Input: nums = [-1,0,3,5,9,12], target = 2
Output: -1
Explanation: 2 does not exist in nums so return -1
Constraints:
- 1 <= nums.length <= 10^4
- -10^4 < nums[i], target < 10^4
- All the integers in nums are unique.
- nums is sorted in ascending order.
Solution 1. Binary Search
public int search(int[] nums, int target) {
int start = 0;
int end = nums.length-1;
while(start <= end){
int mid = start + (end-start)/2;
if(nums[mid] == target){
return mid;
}else if(nums[mid] < target){
start = mid+1;
}else{
end = mid-1;
}
}
return -1;
}
정렬되어 있는 배열에서 원하는 값을 찾기 위해 이진탐색(Binary Search)을 이용할 수 있습니다.
검색 범위를 지정할 두개의 포인터를 두고 가운데 값(mid)을 스캔한 후 찾는 값(target)이 중간값보다 작으면 스캔범위를 포인터를 앞으로 옮기고 아니면 뒤쪽을 스캔하는 것을 반복합니다.
- 시간복잡도 : O(logN)
- 공간복잡도 : O(1)
Reference
'알고리즘 > LeetCode' 카테고리의 다른 글
[LeetCode] 35. Search Insert Position - 문제풀이 (0) | 2022.01.17 |
---|---|
[LeetCode] 278. First Bad Version - 문제풀이 (0) | 2022.01.17 |
[LeetCode] 21. Merge Two Sorted Lists - 문제풀이 (0) | 2022.01.15 |
[LeetCode] 994. Rotting Oranges - 문제풀이 (0) | 2022.01.14 |
[LeetCode] 542. 01 Matrix - 문제풀이 (0) | 2022.01.14 |