zoukankan      html  css  js  c++  java
  • Leetcode--34--Search for a Range

    题型:binary search

    关键在于二分查找中left,right,mid三者以及num[mid]与target的大小关系设置。

    举例:nums = [1, 2, 2, 6, 7]         target = 2 或者 3

    根据这个样例可以得出以下具体结果

    首先,分4种情况:

    1. 如果target存在nums中,得到>=target的最左位置

    2. 如果target存在nums中,得到>=target的最右位置

    3. 如果target不存在nums中,得到>target的最左位置

    4. 如果target不存在nums中,得到>target的最右位置

    #解决情况1, 4
    #情况1:因为nums[mid]==target,r位置会向左移动
    #情况4:因为return l,返回的l是如果对于target小于nums[mid]来说,l是会+1;否则r会-1,;不管怎样都是取的>target的位置
    l = 0 r = len(nums) - 1 while l <= r: mid = l + (r - l) / 2 if nums[mid] == target: r = mid - 1 elif nums[mid] > target: r = mid - 1 else: l = mid + 1 return l
    #解决情况2, 3
    #理由同上
    l = 0 r = len(nums) - 1 while l <= r: mid = l + (r - l) / 2 if nums[mid] == target: l = mid + 1 elif nums[mid] > target: r = mid - 1 else: l = mid + 1

    solution code:

     1 class Solution(object):
     2     def searchRange(self, nums, target):
     3         """
     4         :type nums: List[int]
     5         :type target: int
     6         :rtype: List[int]
     7         """
     8         if len(nums)==0:
     9             return [-1,-1]
    10         if nums[len(nums)-1] < target or nums[0] > target:
    11             return [-1,-1]
    12         l = 0
    13         r = len(nums) - 1
    14         # <= 
    15         while l <= r:
    16             mid = l + (r - l) / 2
    17             if nums[mid] == target:
    18                 r = mid - 1
    19             elif nums[mid] > target:
    20                 r = mid - 1
    21             else:
    22                 l = mid + 1
    23         left = l
    24         l = 0
    25         r = len(nums) - 1
    26         while l <= r:
    27             mid = l + (r - l) / 2
    28             if nums[mid] == target:
    29                 l = mid + 1
    30             elif nums[mid] > target:
    31                 r = mid - 1
    32             else:
    33                 l = mid + 1
    34         right = r
    35         if nums[left] == target:
    36             return [left, right]
    37         else:
    38             return [-1, -1]
    39             #return [right, left]
    View Code
  • 相关阅读:
    hello fetch
    git 基础命令
    拜占庭将军
    如何学习区块链
    简单的理解区块链技术
    使用AOP统一验签和校参
    为每个请求分配traceId的两种方式及父子线程本地变量传递
    监听kafka消息
    JVM OOM分析与调优
    JVM内存结构
  • 原文地址:https://www.cnblogs.com/xxx0624/p/5170365.html
Copyright © 2011-2022 走看看