请实现无重复数字的升序数组的二分查找
给定一个 元素升序的、无重复数字的整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标(下标从 0 开始),否则返回 -1
数据范围: , 数组中任意值满足
进阶:时间复杂度 ,空间复杂度
[-1,0,3,4,6,10,13,14],13
6
13 出现在nums中并且下标为 6
[],3
-1
nums为空,返回-1
[-1,0,3,4,6,10,13,14],2
-1
2 不存在nums中因此返回 -1
数组元素长度在[0,10000]之间数组每个元素都在 [-9999, 9999]之间。
class Solution(object): def search(self , nums, target): self.target = target self.nums = nums return self.erfen(0, len(nums)-1) def erfen(self, left, right): if left > right: return -1 m = (left+right)//2 if self.target == self.nums[m]: return m elif self.target < self.nums[m]: return self.erfen(left, m-1) else: return self.erfen(m+1, right)
class Solution: def search(self , nums: List[int], target: int) -> int: left_index = 0 right_index = len(nums) - 1 target_index = -1 while left_index <= right_index: center_index = (left_index + right_index) // 2 center_num = nums[center_index] if center_num < target: left_index = center_index +1 elif center_num > target: right_index = center_index -1 else: target_index = center_index break return target_index
class Solution: def search(self , nums: List[int], target: int) -> int: # write code here left=0 right=len(nums)-1 while left<=right: middle=(left+right)//2 if nums[middle]==target: return middle if nums[middle]>target: right=middle-1 else: left=middle+1 return -1
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param nums int整型一维数组 # @param target int整型 # @return int整型 # class Solution: def search(self , nums: List[int], target: int) -> int: n=len(nums) left_index=0 right_index=n-1 while left_index<=right_index: mid_index=(left_index+right_index)//2 if nums[mid_index]>target: right_index=mid_index-1 if nums[mid_index]<target: left_index=mid_index+1 if nums[mid_index]==target: return mid_index return -1
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param nums int整型一维数组 # @param target int整型 # @return int整型 # class Solution: def search(self , nums: List[int], target: int) -> int: length = len(nums) # 空列表 if length == 0: return -1 # 1个数值 if length == 1: return -1 if target != nums[0] else 0 # 多个数值 left = 0 right = len(nums) - 1 #过界 if (nums[left] > target)&nbs***bsp;(nums[right] < target): return -1 # 边界 if nums[left] == target: return 0 if nums[right] == target: return right # 界内 while right - left > 1: # 二分 mid = (left + right)//2 if nums[mid] > target: right = mid elif nums[mid] < target: left = mid else: return mid return -1如注释
class Solution: # 二分查找, 必须是升序数组。 def search(self , nums: List[int], target: int) -> int: # write code here l = 0 r = len(nums) - 1 # 从数组首尾开始, 直到两者相遇 while l <= r: # 求中间值 tgt_ind = l +int((r-l)/2) # 检查中间值是否等于目标值 if nums[tgt_ind] == target: return tgt_ind # 中间值大于目标值, 表示在左区间 if nums[tgt_ind] > target: r = tgt_ind - 1 else: # 中间值小于于目标值, 表示在右区间 l = tgt_ind + 1 return -1
class Solution: def search(self , nums: List[int], target: int) -> int: # write code here length = len(nums) left = 0 right = length if length < 1: return -1 while left <= right: mid = int((left + right) / 2) if nums[mid] == target: return mid elif nums[mid] < target: left = mid + 1 else: right = mid - 1 return -1