LeetCode 33. 【找 target】搜索旋转排序数组 / 81. 搜索旋转排序数组 II(Medium)

在这里插入图片描述
搜索旋转排序数组
在这里插入图片描述
搜索旋转排序数组 II

题解

  1. 搜索旋转排序数组

思路

在这里插入图片描述

代码

  • 搜索旋转排序数组
class Solution:
    ### 1228 二分法(40 ms,15.2 MB)
    def search(self, nums: List[int], target: int) -> int:
        # 若为空数组,直接返回-1
        if not nums: return -1

        # 初始化左、右边界
        l, r = 0, len(nums)-1

        # 当左、右边界不越界时,进行循环
        while l <= r:
            # 进行二分计算
            mid = (l + r) // 2

            # 二分法终止条件
            if nums[mid] == target: return mid

            # 判断哪一部分是有序的,只需在 有序 部分中进行查找
            if nums[l] <= nums[mid]:
                # 判断target是否在当前有序部分
                if nums[l] <= target < nums[mid]: r = mid - 1
                else: l = mid + 1
            else:
                # 判断target是否在当前有序部分
                if nums[mid] < target <= nums[r]: l = mid + 1
                else: r = mid - 1
        
        return -1 # 若二分停止还未找到,则返回-1
  • 搜索旋转排序数组 II
class Solution:
    ### 1229 二分法(32 ms,15.2 MB)
    def search(self, nums: List[int], target: int) -> bool:
        if not nums: return False

        l, r = 0, len(nums) - 1

        # 左、右边界不越界时,进行循环
        while l <= r:
            mid = (l + r) // 2
            
            # 二分法终止条件
            if nums[mid] == target: return True

            # 判断哪一部分是有序的,在有序的部分中进行查找
            if nums[l] < nums[mid]:
                if nums[l] <= target < nums[mid]: r = mid - 1
                else: l = mid + 1

            # 若无序的部分中有相同的值,则左边界后移一位
            elif nums[l] == nums[mid]: l += 1

            else:
                if nums[mid] < target <= nums[r]: l = mid + 1
                else: r = mid - 1

        return False
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值