题解 | #旋转位置的特定牛#
旋转位置的特定牛
https://www.nowcoder.com/practice/4872ba1fef224bd382b49a5958d996ab
- 题目考察的知识点 : 二分查找
- 题目解答方法的文字分析:
- 我们当前查找的区间为[left,right],mid 为 left 和 right 的中间位置。由于该区间不一定是连续增加的,所以我们不能直接通过 nums[left]<nums[right] 判断这个区间是否是递增的,但是我们发现,无论这个区间如何旋转,它总会被分成两部分:前半段 A 和后半段 B,且前半段所有元素都大于等于后半段中任意元素。
- 如果 nums[mid] >= nums[left],说明 mid 在 A 子区间中。若 target 大于等于 nums[left],则 target 可能在 [left,mid] 中;否则,target 只可能在 B 子区间中 [mid+1,right]。
- 如果 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题的解法思路