原题链接

题意:给你一个目标值,或者返回其在数组中的下标位置,或者返回-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的更多相关文章

  1. 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 ...

  2. Search in Rotated Sorted Array——LeetCode

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...

  3. Find Minimum in Rotated Sorted Array leetcode

    原题链接 直接贴代码,这道题是 search in rotated sorted array leetcode 的前面部分! class Solution { public: int findMin( ...

  4. [LeetCode] Search in Rotated Sorted Array II 在旋转有序数组中搜索之二

    Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...

  5. [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 ...

  6. 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 ...

  7. [LeetCode]题解(python):081 - Search in Rotated Sorted Array II

    题目来源 https://leetcode.com/problems/search-in-rotated-sorted-array-ii/ Follow up for "Search in ...

  8. Leetcode系列-Search in Rotated Sorted Array

    做Leetcode题有一段时间了,但都是断断续续的,到现在才做了30题左右,感觉对自己来说还是有点难度的.希望自己能继续坚持下去,在校招前能解决超过一百题吧. 其实这些题就是用来训练你的解题思路的,做 ...

  9. [Leetcode][Python]33: Search in Rotated Sorted Array

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 33: Search in Rotated Sorted Arrayhttps ...

随机推荐

  1. 新建jsp报错“The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path”

    今天新建jsp文件时,就报错“Visual Page Editor has experimental support for Windows 64-bit”,然后刚好stackoverflow上面有这 ...

  2. 二模07day1解题报告

    T1.种树(tree) 有n棵树,各有高度,要求每棵树的高度都小于它到其他树的距离(可能种一起).求砍掉的总高度是多少. Ok,那么可以想到,只要满足每棵树和最近的树满足条件就可以保证和其他树满足了. ...

  3. openldap加密传输sssd

    http://blog.father.gedow.net/2015/09/29/sssd-ldap-sudo/ yum -y install openldap-clients sssd authcon ...

  4. Http的请求对象

    Servlet 客户端 HTTP 请求 当浏览器请求网页时,它会向 Web 服务器发送特定信息,这些信息不能被直接读取,因为这些信息是作为 HTTP 请求的头的一部分进行传输的.您可以查看 HTTP ...

  5. 更改form字段内容颜色

    1.fnd_global.Newline ---换行2.设置栏位值颜色:POST-QUERY SET_ITEM_INSTANCE_PROPERTY('FIND_RESULT.STATUS',CURRE ...

  6. Centos下MySQL使用总结

    转载于CentOS中文站:http://www.centoscn.com/CentOS/Intermediate/2013/0817/1334.html 一.MySQL安装 Centos下安装mysq ...

  7. TIJ读书笔记06-终结清理和垃圾回收

    TIJ读书笔记06-终结清理和垃圾回收 finalize()方法 垃圾回收器如何工作 java的垃圾回收是由jvm来控制的.所以需要java程序员参与的部分不是很多. 但是在这里需要明白一点,java ...

  8. (转)javascript中的对象查找

    本文转自:http://otakustay.com/object-lookup-in-javascript/  ---很棒的一篇文章,作者的其他文章还暂时没读,但相信作者是一个谦虚 谨慎的好工程师 近 ...

  9. 基于PHP生成静态页的实现方法

    t1.php 复制代码 代码如下: <?php// 方法一根据模版生成静态页面// replaceTemplateString函数用于替换模板中指定字符串function replaceTemp ...

  10. VC++ 在两个程序中 传递字符串等常量值的方法:使用了 WM_COPYDATA 消息的

    消息作用:    在进程间共享数据(内部通过创建内存映射文件) 消息介绍:需要用到的数据结构/类型:typedef struct tagCOPYDATASTRUCT {    ULONG_PTR dw ...