# 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