【leetcode】81. 搜索旋转排序数组 II

原题地址:https://leetcode.cn/problems/search-in-rotated-sorted-array-ii/

用循环遍历数组肯定能轻松找到target

但要尽可能减少操作步骤,一般跟顺序有关的都是用二分,关键是这题如何二分搜索

在找到中间位置mid后,数组被分成两个部分,一个有序一个无序,只要判断哪边是有序数组,然后再判断target是否在有序数组中,即可知道接下来要搜索哪一边。

如何判断哪一边是有序数组?可以把nums[mid]和nums[l]做比较,if now < nums[l] 右边有序,反之 左边有序

但还是会出现一个问题。就是重复如果now == nums[l],该怎么办?此时就把l右移一位即可(+1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
'''
二分后一边有序一边无序,看target是否在有序的那一边的范围内
'''
 
 
class Solution:
    def search(self, nums: List[int], target: int) -> bool:
        l, r = 0, len(nums) - 1
        while l <= r:
            mid = (l + r) // 2
            now = nums[mid]
            if now == target:
                return True
            if now < nums[l]: # 右边有序
                if now < target and target <= nums[r]:
                    l = mid + 1
                else:
                    r = mid - 1
            elif now > nums[l]: # 左边有序
                if nums[l] <= target and target < now:
                    r = mid - 1
                else:
                    l = mid + 1
            else:
                l = l + 1
        return False

  

posted @   gogslow  阅读(31)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示