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

LeetCode讲解篇之33. 搜索旋转排序数组

文章目录

  • 题目描述
  • 题解思路
  • 题解代码

题目描述

题目链接
在这里插入图片描述

题解思路

旋转后的数组具备一个特性,如果把数组分割成两部分,必定至少有一部分是递增的,并且其中递增区间可以通过左端点小于右端点这个特征来确定

我们基于这个特性,进行二分查找数组时,判断递增区间是左区间还是右区间
然后基于该递增区间进行剪枝

  • 如果target不在我们确定的递增区间中,则舍弃该递增区间的后续查找
  • 如果target在我们确定的递增区间中,则舍弃另一个区间的后续查找

题解代码

func search(nums []int, target int) int {n := len(nums)if n < 2 {if nums[0] == target {return 0}return -1}l, r := 0, n - 1for l <= r {mid := (l + r) >> 1if nums[mid] == target {return mid}// 若 l == mid,意味着 [l, r] 这个区间内只有两个元素,检查该区间内是否存在目标值if l == mid {if nums[r] == target {return r}return -1}if nums[l] < nums[mid] {// 左区间 l ~ mid 为递增区间if nums[l] <= target && target < nums[mid] {// 目标值在递增区间内r = mid - 1} else {// 目前值不在递增区间内l = mid + 1}} else {// 右区间 mid ~ r 为递增区间if nums[mid] < target && target <= nums[r] {// 目标值在递增区间内l = mid + 1} else {// 目标值不在递增区间内r = mid - 1}}}// 二分搜索未找到目标值,返回-1return -1
}

http://www.mrgr.cn/news/38583.html

相关文章:

  • 哈希知识点总结:哈希、哈希表、位图、布隆过滤器
  • DMA的原理
  • FPGA-Vivado-IP核-逻辑分析仪(ILA)
  • Linux 线程互斥
  • html5 + css3
  • Python精选200Tips:181-182
  • [leetcode]5_最长回文子串
  • AAMAS 24 | 基于深度强化学习的多智能体和自适应框架用于动态组合风险管理
  • 一文理解mysql 联合索引和各种SQL语句分析
  • Python语言语法基础篇
  • 微信小程序开发系列之-实战搭建一个简单的待办事项小程序
  • Time-MoE : 时间序列领域的亿级规模混合专家基础模型
  • UE学习篇ContentExample解读------Blueprints Advanced-下
  • Linux进程-2
  • 鸿蒙媒体开发系列12——音频输入设备管理(AudioRoutingManager)
  • 一篇文章了解【函数指针数组】
  • Linux Mint急救模式
  • Hashcat
  • 多输入多输出预测 | NGO-BP北方苍鹰算法优化BP神经网络多输入多输出预测(Matlab)
  • jetlinks物联网平台学习4:http协议设备接入