search in rotated sorted array leetcode
题意:给你一个目标值,或者返回其在数组中的下标位置,或者返回-1(表示不存在,查找失败)。
例如 0 1 2 4 5 6 7 可能成为 4 5 6 7 0 1 2.
思路分析:
用二分搜索来找到转折点,也就是最小数的位置。对二分搜索要稍作修改,当a[left]<=a[mid],可以肯定a[left...mid]是升序的,那么a[left]是最小的,也可能最小的在a[mid+1...right]中,所以要比较a[left]和min{a[mid+1...right]},同样对于a[left]>a[mid],做相应的处理。
来看代码:
class Solution {
public:
int findPos(vector<int>& nums,int left,int right){
//if (nums.empty())//多余
// return -1;
if (left > right||left>=nums.size())//后面这个条件不要,一些测试用例会产生下标越界错误
return -;
int mid = (left + right) / ;
if (nums[left] <= nums[mid])
{
int pos = findPos(nums, mid + , right);
if (pos == -)
return left;
else
return nums[left] < nums[pos] ? left : pos;
}
else
{
int pos = findPos(nums, left, mid - );
if (pos == -)
return mid;
else
return nums[mid] < nums[pos] ? mid :pos;
}
}
int bsearch(vector<int>nums, int left, int right, int key)
{
if (left>right)
return -;
int mid = (left + right) / ;
if (nums[mid] == key)
return mid;
if (nums[mid] < key)
return bsearch(nums, mid + , right, key);
else
return bsearch(nums, left, mid - , key);
}
int search(vector<int>& nums, int target)
{
int len = nums.size();
int pos = findPos(nums, , len);
int index;
if ((index=bsearch(nums, , pos - ,target)) != -)
return index;
else return bsearch(nums, pos, len, target);
}
};
search in rotated sorted array leetcode的更多相关文章
- Search in Rotated Sorted Array leetcode java
题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 ...
- Search in Rotated Sorted Array——LeetCode
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...
- Find Minimum in Rotated Sorted Array leetcode
原题链接 直接贴代码,这道题是 search in rotated sorted array leetcode 的前面部分! class Solution { public: int findMin( ...
- [LeetCode] 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 在旋转有序数组中搜索
Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...
- LeetCode:Search in Rotated Sorted Array I II
LeetCode:Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to y ...
- [LeetCode]题解(python):081 - Search in Rotated Sorted Array II
题目来源 https://leetcode.com/problems/search-in-rotated-sorted-array-ii/ Follow up for "Search in ...
- Leetcode系列-Search in Rotated Sorted Array
做Leetcode题有一段时间了,但都是断断续续的,到现在才做了30题左右,感觉对自己来说还是有点难度的.希望自己能继续坚持下去,在校招前能解决超过一百题吧. 其实这些题就是用来训练你的解题思路的,做 ...
- [Leetcode][Python]33: Search in Rotated Sorted Array
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 33: Search in Rotated Sorted Arrayhttps ...
随机推荐
- 设置arc/非arc
1,选择项目中的Targets,选中你所要操作的Target,2,选Build Phases,在其中Complie Sources中选择需要ARC的文件双击, 并在输入框中输入:-fobjc- ...
- 用递归方法求一个list的最大值
极好的一张图,瞬间理解.然后留意一下边界条件直接搞定.
- c# webform网站图片另存代码
好辛苦生成了二维码,然后要实现点击“保存图片”,弹出选择路径进行保存的效果. look: string qrcodeurl = ""; string username = &quo ...
- php curl vs python提交多维数组+文件
总结: 1.data数据格式 2.php post 格式无需json_encode(关联数组,所以可以绕弯) 参考:http://bbs.csdn.net/topics/390645553?page ...
- Python TCP客户端
import socket target_host="www.baidu.com" target_port=80 # 建立一个socket对象 client=socket.sock ...
- Hue整合Sqoop报空指针异常的解决方法
hue是一个Apache基金会下的一个开源图形化管理工具,使用python语言开发,使用的框架是Django.而sqoop也是Apache的一个开源工具,是使用Java语言开发,主要用于进行hdfs和 ...
- 解决Cannot modify header information - headers already sent by
output_buffering = On ,在php.ini中设置.
- jQuery Mobile 脚本加载问题
刚开始使用jQuery Mobile,发现很多问题需要重新考虑,比如脚本加载问题. 在普通html中,如果a.html中有链接到b.html,b.html中有类似代码: $(document).rea ...
- VBS 相关知识 笔记
1.Option Explicit: 必须声明了变量之后才能赋值. 原话:语句在模块级别中使用,强制显式声明模块中的所有变量. w3scholl看到的内容: 变量声明 您可以使用 Dim.Publi ...
- AX2009按照批次生产日期预留
AX2009如果想按照批处理号预留,它默认是按照InventBatchId排序的,但并不是InventBatchd小的批次的生产日期就早,所以这个逻辑得改一下,让它按照InventBatch的Prod ...