题解 | #旋转位置的特定牛#

旋转位置的特定牛

https://www.nowcoder.com/practice/4872ba1fef224bd382b49a5958d996ab

  • 题目考察的知识点 : 二分查找
  • 题目解答方法的文字分析:
  1. 我们当前查找的区间为[left,right],mid 为 left 和 right 的中间位置。由于该区间不一定是连续增加的,所以我们不能直接通过 nums[left]<nums[right] 判断这个区间是否是递增的,但是我们发现,无论这个区间如何旋转,它总会被分成两部分:前半段 A 和后半段 B,且前半段所有元素都大于等于后半段中任意元素。
  2. 如果 nums[mid] >= nums[left],说明 mid 在 A 子区间中。若 target 大于等于 nums[left],则 target 可能在 [left,mid] 中;否则,target 只可能在 B 子区间中 [mid+1,right]
  3. 如果 nums[mid] < nums[left],说明 mid 在 B 子区间中。若 target 小于等于 nums[right],则 target 可能在[mid+1,right] 中;否则,target 只可能在 A 子区间中[left,mid]
  • 本题解析所用的编程语言:Python
  • 完整且正确的编程代码

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @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:
                if nums[right] >= target:
                    left = mid + 1
                else:
                    right = mid - 1
            else:
                if nums[left] <= target:
                    right = mid - 1
                else:
                    left = mid + 1
        return -1
牛客高频top202题解系列 文章被收录于专栏

记录刷牛客高频202题的解法思路

全部评论

相关推荐

迷茫的大四🐶:看来已经准备换人了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务