본문으로 바로가기

[LeetCode] 704.Binary Search - 문제풀이

category 알고리즘/LeetCode 2022. 1. 17. 12:55

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

 

Binary Search - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com