问题链接

LeetCode 33. Search in Rotated Sorted Array

题目解析

给定一个 “升序”无重复 数组,从中寻找目标值。“升序”:旋转后的升序,例如 [4,5,1,2,3]。

时间限制:\(O(lgN)\)。

解题思路

题目要求在 \(O(lgN)\) 时间内找到目标值,很容易想到二分法。如果是普通的升序,普通的二分即可解决问题。题目中提到的旋转后的升序,我们不知道其“旋转点”在哪,那么有什么特点呢?以题目例子分析:

对于普通升序数组[0,1,2,3,4,5,6,7],其旋转后可能情况有[1,2,3,4,5,6,7,0]、[2,3,4,5,6,7,0,1][3,4,5,6,7,0,1,2]、[4,5,6,7,0,1,2,3]、[5,6,7,0,1,2,3,4]、[6,7,0,1,2,3,4,5]、[7,0,1,2,3,4,5,6]七种情况。

二分法的关键在于取中间值后,与目标值比较,判断左半段还是右半段。观察上述八种情况,可以发现以中间值为界,左右两部分总有一段是绝对升序的。当 nums[mid] < nums[right] 时,右半段绝对升序;当 nums[mid] > nums[right] 时,左半段绝对升序。

仔细想想,这个规律很简单的,不需要证明。

旋转有序的特点已经找到了,我们只需要判断目标值是否在绝对升序的范围内,就可以确定二分的边界了。

参考代码

class Solution {
public:int search(vector<int>& nums, int target) {int len = nums.size();if (len < 1) return -1;int left = 0, right = len-1;while(left <= right) {int mid = (left + right) / 2;if (nums[mid] == target) return mid;if (nums[mid] < nums[right]) {if (nums[mid] < target && nums[right] >= target) left = mid+1;else right = mid-1;}else {if (nums[left] <= target && nums[mid] > target) right = mid-1;else left = mid+1;}}return -1;}
};

相似题目

LeetCode 81. Search in Rotated Sorted Array II


LeetCode All in One题解汇总(持续更新中...)

本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.


转载于:https://www.cnblogs.com/AlvinZH/p/9047771.html

LeetCode 33. Search in Rotated Sorted Array相关推荐

  1. [Leetcode] 33. Search in Rotated Sorted Array 解题报告

    题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7  ...

  2. leetcode 81 Search in Rotated Sorted Array II ----- java

    Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...

  3. 【leetcode】Search in Rotated Sorted Array II(middle)☆

    Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...

  4. 【leetcode】33. Search in Rotated Sorted Array

    题目如下: 解题思路:题目要求时间复杂度是O(log n),而且数组也是有序的,那么可以考虑采用二分查找法.那么解题的关键就是找出转折点,找到了转折点后,把数组拆分成两段,再分别用二分查找,即可得到答 ...

  5. 33. Search in Rotated Sorted Array

    description: 一个数列,不知道在哪翻转了一下,现在给定一个值,如果他在这个翻转后的数列里, return 它对应的 index Suppose an array sorted in asc ...

  6. [LeetCode] 81. Search in Rotated Sorted Array II

    题目: Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. ( ...

  7. Search in Rotated Sorted Array - 循环有序数组查找问题

    两道题 33. Search in Rotated Sorted Array https://leetcode.com/problems/search-in-rotated-sorted-array/ ...

  8. LeetCode Online Judge 题目C# 练习 - Search in Rotated Sorted Array II

    Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...

  9. LeetCode Search in Rotated Sorted Array II

     Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would t ...

最新文章

  1. concurrent.futures模块(进程池线程池)
  2. mysql 逻辑架构
  3. Harris算子的运用 用于图像配准
  4. JZOJ 1533. 郁闷的gxg
  5. PTA第3章-9 字符串转换成十进制整数 (15 分)
  6. php 国密 签名,关于php国密SM3签名算法
  7. Linux下的用户、组和权限的详细解释
  8. 基于JAVA+SpringMVC+Mybatis+MYSQL的大学生考勤管理系统及智能分析系统
  9. Silverlight中使用MVVM(9)-绑定Enum类型数据
  10. python400集视频教程-微软官方出品的400集Python精品视频教程,这正是我们急需的!...
  11. 生产者和消费者问题变形
  12. mysql备份和还原
  13. php大马程序_php大马是什么
  14. tp5 点击刷新验证码
  15. 达人评测 iPad Pro 2021怎么样
  16. 网易互联网(网易严选)测试开发工程师
  17. APP产品经理必须要懂的30条原则——来自腾讯张小龙的演讲
  18. Spring Data Redis学海拾贝
  19. 基于 SpringBoot + Vue 的学生公寓管理系统
  20. 小王子(LCA的运用)

热门文章

  1. html5游戏开发-零基础开发RPG游戏-开源讲座(四)
  2. 【Java从0到架构师】SpringMVC - RESTful
  3. 【Java从0到架构师】Maven
  4. Shiro 权限管理入门之认证与授权
  5. 关于职场的6个深刻道理,每个都是血泪教训换来的,你一定要懂
  6. python学习精华——成长篇
  7. java对象的内存分配_java对象在内存的分配问题
  8. nginx 端口转发_Knative Service 是如何指定端口和协议的
  9. swoole mysql 协程_swoole-orm: 基于swoole的mysql协程连接池,简单封装。实现多个协程间共用同一个协程客户端。参考thinkphp-orm...
  10. mysql workbench第二栏图标中英文意思