【Leetcode】【Hard】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 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)将数列从mid处划分,按照前半段序列顺序正常,或者不正常,进行条件判断,达到log(n)的二分效果;
(2)将数列从mid处划分,比较mid处元素和target,按照mid元素大,或者mid元素小,进行条件判断,达到log(n)的二分效果;
代码实现1:
代码简介,灵活的运用的二分的思想,将正常/非正常作为二分标准,而不是mid值大还是小。
class Solution {
public:
int search(vector<int>& nums, int target) {
int start = ;
int end = nums.size() - ;
while (start <= end) {
int mid = (start + end) / ;
if (nums[mid] == target)
return mid;
if (nums[start] <= nums[mid]) {
if (nums[start] <= target && target <= nums[mid])
end = mid - ;
else
start = mid + ;
} else {
if (nums[mid] <= target && target <= nums[end])
start = mid + ;
else
end = mid - ;
}
}
return -;
}
};
代码实现2:
思路更常规,虽然代码不如1简介,但是逻辑更好理解。
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) {
if (nums[left] <= target || nums[left] > nums[mid])
right = mid;
else
left = mid + ;
} else if (nums[mid] == target) {
left = mid;
break;
} else {
if (nums[right] >= target || nums[mid] > nums[right])
left = mid + ;
else
right = mid;
}
}
if (nums[left] == target)
return left;
else
return -;
}
};
【Leetcode】【Hard】Search in Rotated Sorted Array的更多相关文章
- LeetCode(力扣)——Search in Rotated Sorted Array 搜索旋转排序数组 python实现
题目描述: python实现 Search in Rotated Sorted Array 搜索旋转排序数组 中文:假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1 ...
- 【一天一道LeetCode】#81. Search in Rotated Sorted Array II
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Follow ...
- 【LeetCode】Search in Rotated Sorted Array II(转)
原文链接 http://oj.leetcode.com/problems/search-in-rotated-sorted-array-ii/ http://blog.csdn.net/linhuan ...
- 【LeetCode】81. Search in Rotated Sorted Array II 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/search-in ...
- 【leetcode】Search in Rotated Sorted Array II
Search in Rotated Sorted Array II Follow up for "Search in Rotated Sorted Array":What if d ...
- 【leetcode】Search in Rotated Sorted Array
Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you before ...
- 【leetcode】Search in Rotated Sorted Array II(middle)☆
Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...
- 【Leetcode】81. Search in Rotated Sorted Array II
Question: Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? ...
- 【LeetCode】81. Search in Rotated Sorted Array II (2 solutions)
Search in Rotated Sorted Array II Follow up for "Search in Rotated Sorted Array":What if d ...
- 【LeetCode】33. Search in Rotated Sorted Array (4 solutions)
Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you before ...
随机推荐
- (转)Python random模块
原文:https://my.oschina.net/cuffica/blog/33336 https://www.cnblogs.com/renpingsheng/p/7105296.html ran ...
- sql根据表中数量字段自动复制记录行
客户需要将表中统计好的数据还原成统计前的原始记录 例如: ID Name QTYCount100 Name1 1101 Name2 2102 Name3 3103 Name4 4104 Name5 5 ...
- sencha touch list infinite 属性
sencha touch list 1 默认每一项的高度会自动适应其内容. 2 当每一个 item 的高度都相同且不变时, 设置 itemHeight 为固定值 和 variableHeights 为 ...
- springmvc的json数据交互
准备 @RequestBody 作用: @RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容(json ...
- Mybatis 关联查询(三)
多对多的管理查询结果映射 1. 需求: 查询用户购买的商品信息 2. 分析: (1)用户和商品没有直接关联 (2)用户和订单进行了关联,订单和订单明细进行了关联,订单明细和商品进行了关联,因此 ...
- java并发编程(1)并发程序的取消于关闭
一.任务的取消于关闭 1.中断Thread 1.每个线程都有一个boolean类型的中断状态.true则是中断状态中 interrupt:发出中断请求:isInterrupt:返回中断状态:inter ...
- Db - DataAccess
/* Jonney Create 2013-8-12 */ /*using System.Data.OracleClient;*/ /*using System.Data.SQLite;*/ /*us ...
- java 并发(五)---AbstractQueuedSynchronizer(4)
问题 : rwl 的底层实现是什么,应用场景是什么 读写锁 ReentrantReadWriteLock 首先我们来了解一下 ReentrantReadWriteLock 的作用是什么?和 Reent ...
- 二:SpringAOP
一:AOP 面向切面编程思想 横向重复,纵向抽取 |- filter中 |- 动态代理 |- interceptor中 二:动态代理 1.通过动态代理可以体现aop思想 2.对目标对象中的方法进行增强 ...
- centos自带python2.6升级到python2.7。并解决yum pip easy_install pip等模块兼容性问题
参考原文: https://www.cnblogs.com/kimyeee/p/7250560.html https://www.cnblogs.com/galaxy-gao/p/5796488 ...