LeetCode 33 搜索旋转排序数组
题目:
假设按照升序排序的数组在预先未知的某个点上进行了旋转。
( 例如,数组 [0,1,2,4,5,6,7]
可能变为 [4,5,6,7,0,1,2]
)。
搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1
。
你可以假设数组中不存在重复的元素。
你的算法时间复杂度必须是 O(log n) 级别。
示例 1:
输入: nums = [4,5,6,7,0,1,2]
, target = 0
输出: 4
示例 2:
输入: nums = [4,5,6,7,0,1,2]
, target = 3
输出: -1
解题思路:
由于题目要求时间复杂度为O(logn), 并且是有序的查找,我们自然先想到二分查找。
对于{0,1,2,4,5,6,7}这个例子,我们试着将它所有的旋转例子都列出来,如下:
0 1 2 4 5 6 7
7 0 1 2 4 5 6
6 7 0 1 2 4 5
5 6 7 0 1 2 4
4 5 6 7 0 1 2
2 4 5 6 7 0 1
1 2 4 5 6 7 0
发现规律:当中间数小于最右边数时,则其右半段是有序的,当中间数大于最右边的数时,则其左半段是有序的。容易发现不管从哪个位置开始翻转,都有半段是有序的。这样,我们就可以使用二分法来做了。
代码:
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = ;
int right = nums.size() - ;
while(left <= right) {
int mid = (left + right)/;
if(nums[mid] == target) {
return mid;
}
if(nums[mid] < nums[right]) {
if(nums[mid] < target && nums[right] >= target)
left = mid + ;
else
right = mid - ;
}
else {
if(nums[mid] > target && nums[left] <= target)
right = mid - ;
else
left = mid + ;
}
}
return -;
}
};
LeetCode 33 搜索旋转排序数组的更多相关文章
- Java实现 LeetCode 33 搜索旋转排序数组
33. 搜索旋转排序数组 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定的目标值, ...
- 力扣Leetcode 33. 搜索旋转排序数组
33. 搜索旋转排序数组 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定的目标值, ...
- [leetcode] 33. 搜索旋转排序数组(Java)
33. 搜索旋转排序数组 说实话这题我连题都没有看懂....真是醉了 二分,没意思,直接交了- - https://www.jiuzhang.com/solutions/search-in-rotat ...
- leetcode 33. 搜索旋转排序数组 及 81. 搜索旋转排序数组 II
33. 搜索旋转排序数组 问题描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定 ...
- LeetCode 33 - 搜索旋转排序数组 - [二分]
假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定的目标值,如果数组中存在这个目标值, ...
- [LeetCode]33. 搜索旋转排序数组(二分)
题目 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定的目标值,如果数组中存在这个目 ...
- LeetCode 33——搜索旋转排序数组
1. 题目 2. 解答 2.1. 方法一 直接进行二分查找,在判断查找方向的时候详细分类. 当 nums[mid] < target 时, 若 nums[left] <= nums[mid ...
- leetcode 33搜索旋转排序数组
暴力解法:O(n) 想办法用二分查找Ologn
- LeetCode 81——搜索旋转排序数组 II
1. 题目 2. 解答 2.1. 方法一 基于 LeetCode 33--搜索旋转排序数组 中的方法二. 当 nums[mid] = nums[right] 时,比如 [1, 1, 2, 1, 1], ...
随机推荐
- Alpha阶段敏捷冲刺日志的集合贴
敏捷冲刺日志的集合贴 Day1(4.17):http://www.cnblogs.com/software-teamwork/p/8861426.html Day2(4.20):http://www. ...
- photoshop cc 安装失败 2%
photoshop cc 安装失败 2% C盘--Program Files---Common Files--Adobe--caps ,把这个文件夹中的文件全部删除,然后再安装 C:\Pr ...
- mysql 存储session
https://www.cnblogs.com/cndavidwang/p/3930619.html
- Android webview 调起H5微信支付
mWebView.setWebViewClient(new MyWebViewClient()); private class MyWebViewClient extends WebViewClien ...
- jQuery 查找属性
jQuery 查找属性 示例: <div xsk='123' > <div xsk='456' > // 具有xsk属性的所有标签 $('[xsk]') // xsk属性等于1 ...
- Python 匿名变量
匿名变量的使用 calc = lambda x:x*3 print(calc(3)) 注:匿名变量是没有名字的变量 注:使用:lambda 创建.
- Link-Cut-Tree详解
图片参考YangZhe的论文,FlashHu大佬的博客 Link-Cut-Tree实际靠的是实链剖分,重链剖分和长链剖分珂以参考树链剖分详解 Link-Cut-Tree将某一个儿子的连边划分为实边,而 ...
- 一、restful规范 二、CBV(View)源代码执行流程 三、drf框架安装和简单使用
一.restful规范 ''' 它是一个规范,面向资源架构 十条规范 1.API与用户的通讯协议,总是使用HTTPs协议,确保了网络传输的安全性 2.域名 --https://api.example. ...
- 关于Could not read pom.xml和No plugin found for prefix 'tomcate7' in the current project
当时出现的错误: 有大神知道我这个错误怎么解决吗[ERROR] No plugin found for prefix 'tomcate7' in the current project and in ...
- Odd Gnome【枚举】
问题 I: Odd Gnome 时间限制: 1 Sec 内存限制: 128 MB 提交: 234 解决: 144 [提交] [状态] [命题人:admin] 题目描述 According to t ...