LeetCode 33. Search in Rotated Sorted Array
问题链接
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相关推荐
- [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 ...
- leetcode 81 Search in Rotated Sorted Array II ----- java
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...
- 【leetcode】Search in Rotated Sorted Array II(middle)☆
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...
- 【leetcode】33. Search in Rotated Sorted Array
题目如下: 解题思路:题目要求时间复杂度是O(log n),而且数组也是有序的,那么可以考虑采用二分查找法.那么解题的关键就是找出转折点,找到了转折点后,把数组拆分成两段,再分别用二分查找,即可得到答 ...
- 33. Search in Rotated Sorted Array
description: 一个数列,不知道在哪翻转了一下,现在给定一个值,如果他在这个翻转后的数列里, return 它对应的 index Suppose an array sorted in asc ...
- [LeetCode] 81. Search in Rotated Sorted Array II
题目: Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. ( ...
- Search in Rotated Sorted Array - 循环有序数组查找问题
两道题 33. Search in Rotated Sorted Array https://leetcode.com/problems/search-in-rotated-sorted-array/ ...
- 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 ...
- LeetCode Search in Rotated Sorted Array II
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would t ...
最新文章
- concurrent.futures模块(进程池线程池)
- mysql 逻辑架构
- Harris算子的运用 用于图像配准
- JZOJ 1533. 郁闷的gxg
- PTA第3章-9 字符串转换成十进制整数 (15 分)
- php 国密 签名,关于php国密SM3签名算法
- Linux下的用户、组和权限的详细解释
- 基于JAVA+SpringMVC+Mybatis+MYSQL的大学生考勤管理系统及智能分析系统
- Silverlight中使用MVVM(9)-绑定Enum类型数据
- python400集视频教程-微软官方出品的400集Python精品视频教程,这正是我们急需的!...
- 生产者和消费者问题变形
- mysql备份和还原
- php大马程序_php大马是什么
- tp5 点击刷新验证码
- 达人评测 iPad Pro 2021怎么样
- 网易互联网(网易严选)测试开发工程师
- APP产品经理必须要懂的30条原则——来自腾讯张小龙的演讲
- Spring Data Redis学海拾贝
- 基于 SpringBoot + Vue 的学生公寓管理系统
- 小王子(LCA的运用)
热门文章
- html5游戏开发-零基础开发RPG游戏-开源讲座(四)
- 【Java从0到架构师】SpringMVC - RESTful
- 【Java从0到架构师】Maven
- Shiro 权限管理入门之认证与授权
- 关于职场的6个深刻道理,每个都是血泪教训换来的,你一定要懂
- python学习精华——成长篇
- java对象的内存分配_java对象在内存的分配问题
- nginx 端口转发_Knative Service 是如何指定端口和协议的
- swoole mysql 协程_swoole-orm: 基于swoole的mysql协程连接池,简单封装。实现多个协程间共用同一个协程客户端。参考thinkphp-orm...
- mysql workbench第二栏图标中英文意思