704. Binary Search
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