题目

Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

You are given a target value to search. If found in the array return its index, otherwise return -1.

You may assume no duplicate exists in the array.

思路

对于排序之后的数据结构,二分查找是不二法则。本题的关键就在于如何针对旋转之后的排序数组进行二分查找。考虑到数组中没有重复元素(注意这一前提十分关键),可以提供两种思路:

1、两次二分查找:第一次二分查找的目标是找出数组具体在哪个位置做了旋转,这个可以简单地通过比较nums[mid]和它的相邻元素的大小实现。第二次二分查找就简单了:先判断待查找值在左半部分还是右半部分,然后调用普通的二分查找进行查询。

2、一次二分查找:由于数组中没有重复元素,所以思路1中的第一次二分查找其实是不必要的。设中位数为nums[mid],则一次二分查找的思路如下:

1)如果nums[mid] == target,则直接返回mid;

2)如果nums[mid] < nums[right],则说明从mid到right之间是严格递增的。此时可以方便地判断target是否在这一递增区间内:如果是,则在这一递增区间内查找;否则就在另外一个递增区间内找。

3)如果nums[mid] > nums[right],则说明从left到mid之间是严格递增的。此时可以方便地判断target是否在这一递增区间内:如果是,则在这一递增区间内查找;否则就在另外一个递增区间内找。

注意在下面的代码中,即使已经判断出某一区间为严格递增区间了,我们还是用了自己设计的针对旋转排序数组的查找方法。事实上,此时我们可以直接调用标准的二分查找方法,速度应该会更快一些(建议读者自己设计并实现)。

代码:

class Solution {
public:int search(vector<int>& nums, int target) {if(nums.size() == 0)    return -1;int left = 0, right = nums.size() - 1;while(left <= right){int mid = left + (right - left) / 2;if(nums[mid] == target){return mid;}else if(nums[mid] < nums[right])    // the right part is increasing{if(nums[mid] < target && target <= nums[right])left = mid + 1;             // might be improved by binarySearchelseright = mid - 1;}else                                // the left part is increasing{if(nums[left] <= target && target < nums[mid])right = mid - 1;            // might be improved by binarySearchelseleft = mid + 1;}}return -1;}
};

Follow up

如果允许数组中有重复元素呢?此时就不能通过判断相互大小每次使搜索空间减半了。具体解法请参考Leetcode 81。

[Leetcode] 33. Search in Rotated Sorted Array 解题报告相关推荐

  1. LeetCode 33. Search in Rotated Sorted Array

    问题链接 LeetCode 33. Search in Rotated Sorted Array 题目解析 给定一个 "升序" 的 无重复 数组,从中寻找目标值."升序& ...

  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. 视频数据处理方法!关于开源软件FFmpeg视频抽帧的学习
  2. 计算机 微课 论文,探析毕业论文怎么写 关于微课和电脑论文范例30000字
  3. Junit中error和failure区别
  4. Android Handler详细使用方法实例
  5. 2017 OWASP十大安全趋势榜单变化解析
  6. 一些非常有用的备忘录文档
  7. 微信开发修改button里的字体大小_微信小程序全栈开发课程【视频版】2.2 index页面完善...
  8. (20)css3新增选择器
  9. 早上起床后喝一杯白开水是非常有好处的
  10. 行存储索引改换成列存储索引_如何使用列存储索引来改善数据仓库登台环境
  11. docker容器启动几分钟之后自动退出
  12. 报错Failed to load config “prettier“ to extend from.?两步解决方案
  13. Globle Get 多线程下载系统
  14. 一篇文章带你了解jsMind
  15. styl类型文件css,styl样式文件问题:vue重复加载
  16. html页面国际化之谷歌翻译js实践,支持通过判断浏览器语言自动将中文翻译成英文
  17. JAVA程序设计实战(1-9章)
  18. 计算机求导方法:自动微分(Automatic Differentiation)
  19. 将favdb转换成html,360浏览器收藏夹使用小记
  20. 钉钉开放平台“常见问题常见问题常见问题“

热门文章

  1. 题目65:一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格。
  2. 《天龙八部》之《少年游》
  3. 想要转行产品经理,可是社招都要有产品经理相关经验的,该如何转行呢?
  4. 中学生学科学习能力测评
  5. 苹果三代耳机_华强北airpods2 华强北三代耳机 airpodspro可调通透 主动降噪 定位改名 苹果airpodspro...
  6. linux 日历,计算器,nano编辑器,开关机、重启,
  7. 使用fiddler 分析视频网站
  8. Zzzj Submit:WordPress 百度熊掌号/原创保护文章数据推送插件 V3.5
  9. 格林纳达常驻WTO大使孙宇晨受邀出席世贸组织首脑系列讲座
  10. TSN(temporal segment networks)环境配置