欢迎光临
我们一直在努力

二分查找--python实现

牛客网题库: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。

赞(0)
未经允许不得转载:171主机测评 » 二分查找--python实现
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址