牛客网题库:https://www.nowcoder.com/exam/oj?questionJobId=10&subTabName=online_coding_page
二分查找/排序BM17:
题目如下:


Python实现代码如下:
from typing import List
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param nums int整型一维数组
# @param target int整型
# @return int整型
#
class Solution:
def search(self, nums: List[int], target: int) -> int:
left, right = 0, len(nums) – 1
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
return mid
if nums[mid] < target:
left = mid + 1
if nums[mid] > target:
right = mid – 1
return -1
s = Solution()
print(s.search(nums = [-2,3,6,8,10,100], target = 8))
解题思路:
1、定义两个指针,left表示数组从左往右的指针,初始值为0;right表示数组从右往左的指针,初始值为数组长度-1。
2、循环二分查找,left<=right时执行循环,继续查找target;循环结束条件为left>right(当left>right时,查找区域就有重合了)。
3、循环过程中,先取left、right的中间值mid,将该位置的值与target值比较:①相等,则当前位置的数组值就是要找的目标值,返回当前位置mid即可,程序结束;②mid位置的值比target小,则target在数组的右半部分,即mid和right之间,则令left = mid+1,继续循环;③mid位置的值比target大,则target在数组的左半部分,即left和mid之间,则令right = mid-1,继续循环。
4、循环结束后仍然未找到target,则数组中没有与target相等的值,返回-1。





