zoukankan      html  css  js  c++  java
  • 二分查找——目标值搜索(leetcode 704. 二分查找)

    本次有序的无重复数组的目标值位置索引查找的问题,利用二分查找
    二分查找的难点是:决策边界不好确定,分别采用1)左闭右开;2)左闭右闭
    判断的核心:区间范围
    左闭右开 原始的区间范围为[left, right),当判断外部循环是< 还是 <=时,考虑如下情况:
    当采用<时,跳出循环的条件时left=right,因此当时的区间范围为[left, left)
    当采用<=时,跳槽循环的条件是left=right+1, 因此当时的区间范围为[right+1, right) 存在数组越界

    左闭右闭 原始的区间范围为[left, right],当判断外部循环是< 还是 <=时,考虑如下情况:
    当采用<时,跳出循环的条件时left=right,因此当时的区间范围为[left, left],存在公共区间
    当采用<=时,跳出循环的条件是left=right+1, 因此当时的区间范围为[right+1, right]

    #左闭右开
    def query_target(list_num, target):
    left = 0
    right = len(list_num)
    while left < right:
    mid = left + int((right-left)/2)
    if list_num[mid] > target:
    right = mid #right是开区间,mid以及比较完了,当right=mid也不会比较了
    elif list_num[mid] < target:
    left = mid + 1 #left是闭区间,mid以及比较完了,所以需要加1
    else:
    return mid
    return -1

    #左闭右闭
    def query_target_2(list_num, target):
    left = 0
    right = len(list_num) - 1
    while left <= right:
    mid = left + int((right-left)/2)
    if list_num[mid] > target:
    right = mid - 1
    elif list_num[mid] < target:
    left = mid + 1
    else:
    return mid
    return -1

    """
    leetcode 704. 二分查找
    给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,
    如果目标值存在返回下标,否则返回 -1。

    示例 1:
    输入: nums = [-1,0,3,5,9,12], target = 9
    输出: 4
    解释: 9 出现在 nums 中并且下标为 4

    示例 2:
    输入: nums = [-1,0,3,5,9,12], target = 2
    输出: -1
    解释: 2 不存在 nums 中因此返回 -1
    """
    class Solution(object):
    def search(self, nums, target):
    left = 0
    right = len(nums)
    while left < right:
    mid = left + int((right - left) / 2)
    if nums[mid] == target:
    return mid
    elif nums[mid] > target:
    right = mid
    else:
    left = mid + 1
    return -1
  • 相关阅读:
    【计算机网络】第三章 数据链路层
    【网页设计】第四周 JavaSript
    【计算机网络】第二章 物理层
    【计算机网络】第一章 概述
    [寒假学习]ps知识
    [蓝桥杯]算法提高 GPA
    用Java模拟游戏重力的实现(弹跳)
    【狼叔分享】狼叔20年上半年故事分享
    旷视教会我如何安装tensorflow环境|这才是真正的pip install tensorflow
    大学逆袭的三步骤:大三实习、大四秋招、大四春招
  • 原文地址:https://www.cnblogs.com/tomorrow-hope/p/15476585.html
Copyright © 2011-2022 走看看