# 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
```