704. Binary Search

704. Binary Search
Photo by Venrick Azcueta / Unsplash

Problem

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

Solution

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        # binarysearch implies the nums list is sorted
        # nums[0] would break if the list is empty []

        # Binarysearch is a two pointer situation
        # we dont have to use them,but its easier!
        left=0
        right=len(nums)-1

        # this makes sure they don't cross, if they do we cannot find it!
        while(left <= right):
            # calculate midpoint and round up in same operation
            # if we dont round and list is odd length we get a floating point
            mid=(left+right)//2
            # if we found our number, return the index
            if nums[mid]==target:
                return mid
            # if our current index is less than target, we need to move towards the right more
            elif nums[mid] < target:
                 left=mid+1
            else:
                # else we need to move to the left more
                right=mid-1
        return -1