当前位置: 首页 > wzjs >正文

长沙做网站推荐搜索广告

长沙做网站推荐,搜索广告,wordpress舰娘,国外网站无法访问33. 搜索旋转排序数组 一、算法逻辑(逐步通顺讲解每一步思路) ✅ 1️⃣ 找到旋转点(即最小值下标) 使用 findMin(nums) 函数(本质是偏左二分),快速定位旋转数组的最小值下标 i,将…

33. 搜索旋转排序数组

一、算法逻辑(逐步通顺讲解每一步思路)

✅ 1️⃣ 找到旋转点(即最小值下标)

使用 findMin(nums) 函数(本质是偏左二分),快速定位旋转数组的最小值下标 i,将整个数组分为两段:

  • 第一段是 nums[0:i]:比 nums[-1] 大;

  • 第二段是 nums[i:]:比 nums[-1] 小或等于。

该函数核心已分析过,详情参考

二分查找篇——寻找旋转排序数组中的最小值【LeetCode】-CSDN博客

不再赘述,其返回的是最小值的下标 i


✅ 2️⃣ 判断目标所在区间

通过比较 targetnums[-1] 的大小,判断它应该位于哪一段中:

  • 如果 target > nums[-1],说明目标值在旋转点左侧,即第一段(原数组前半部分);

  • 否则,说明目标值在旋转点右侧,即第二段。


✅ 3️⃣ 二分查找目标下标

调用自定义的 lower_bound(nums, left, right, target) 方法,在对应区间内进行精确查找目标值的下标

lower_bound 核心逻辑:
  • 搜索范围是 开区间 (left, right),所以初始边界可能设为 -1n

  • 使用循环不变量:

    • nums[left] < target

    • nums[right] >= target

  • nums[mid] >= target,说明目标可能在左侧或就是 mid,更新 right = mid

  • 否则目标一定在右侧,更新 left = mid

  • 最终判断 nums[right] == target 成立时返回下标,否则返回 -1 表示未找到。


二、核心点总结

✅ 核心思想是:
将旋转排序数组分成两个单调段,然后在正确的一段中用二分查找目标。

✅ 技巧亮点包括:

  • 利用 nums[-1] 作为分界判断依据;

  • lower_bound 使用开区间写法,统一且干净;

  • 充分复用了“二分搜索 + 旋转点定位”的组合模板。

✅ 本题与 LeetCode 153 题(找最小)和 33 题(搜索目标)关联紧密,适合放在一起练习和理解。

class Solution:# 153. 寻找旋转排序数组中的最小值(返回的是下标)def findMin(self, nums: List[int]) -> int:left, right = -1, len(nums) - 1  # 开区间 (-1, n-1)while left + 1 < right:  # 开区间不为空mid = (left + right) // 2if nums[mid] < nums[-1]:right = midelse:left = midreturn right# 有序数组中找 target 的下标def lower_bound(self, nums: List[int], left: int, right: int, target: int) -> int:while left + 1 < right:  # 开区间不为空mid = (left + right) // 2# 循环不变量:# nums[right] >= target# nums[left] < targetif nums[mid] >= target:right = mid  # 范围缩小到 (left, mid)else:left = mid  # 范围缩小到 (mid, right)return right if nums[right] == target else -1def search(self, nums: List[int], target: int) -> int:i = self.findMin(nums)if target > nums[-1]:  # target 在第一段return self.lower_bound(nums, -1, i, target)  # 开区间 (-1, i)# target 在第二段return self.lower_bound(nums, i - 1, len(nums), target)  # 开区间 (i-1, n)

三、时间复杂度分析

  • findMin 查找旋转点:O(log n)

  • lower_bound 二分搜索:O(log n)

✅ 整体时间复杂度为:O(log n)


四、空间复杂度分析

  • 使用常数个变量;

  • 无递归,无额外数组结构。

✅ 空间复杂度为:O(1)


✅ 总结一句话

本解法将旋转数组分段 + 精准定位目标值下标,结合偏左二分与逻辑清晰的 lower_bound 函数,实现了 O(log n) 时间复杂度的优雅搜索,是 LeetCode 33题的标准解法。其中的偏移下标控制和开区间技巧值得深入掌握.

http://www.dtcms.com/wzjs/43085.html

相关文章:

  • wordpress自定义后台菜单seo搜索方法
  • 怎么判断网站被k贵州二级站seo整站优化排名
  • 上海网站建设哪家企业seo测试
  • 网站用户注册怎么建深圳互联网公司排行榜
  • 环保行业网站怎么做营销网站seo推广
  • 罗湖做网站联系电话下载百度极速版免费安装
  • 如何做购物网站推广seo诊断工具有哪些
  • 慧生活798app下载成都网站seo
  • 手机网站建设需求it培训机构排行榜
  • 临沂做wish网站刷排名seo
  • wordpress 单栏优化网站seo公司
  • 网站建设品牌推广seo网络推广培训去哪里好
  • 做网站要源代码近期国际新闻20条
  • 网站pc和手机端分离怎么做百度推广登录网址
  • 互联网公司网站模板南京seo推广公司
  • 最好的餐饮设计网站建设东莞企业网站排名优化
  • 维基百科建设网站可以免费网络推广网站
  • 太原做网站个人长沙网址seo
  • 网站开发可以当程序员新东方烹饪学校
  • 常见的网站名称有哪些沈阳企业网站seo公司
  • 扁平化企业网源码win8风格精简化源码asp带后台企业网站自己怎么做网址开网站
  • 电脑机箱定制网站百度客户电话
  • 建站之星 网站排名seo是什么意思广东话
  • Wordpress上传万网空间唐山百度seo公司
  • 深圳有哪些网站开发公司媒介平台
  • 武汉做网站网络公司百度竞价开户流程
  • 重庆定制网站开发价格西安网站维护
  • python做调查问卷网站网络营销产品策略分析
  • 网站建设类公司新闻推销产品怎么推广
  • 地方性资讯门户网站裂变营销五种模式十六种方法