一.题目描写叙述

二.解题技巧

因为这道题出现了旋转的情况,即比第一个元素小的元素可能出如今数值的后半段或者不出现。

因此。能够考虑採用变种的二分查找,即在比較中间元素与目标之前,先比較第一个元素与目标的关系。这个时候,会出现三种情况:

1.第一个元素刚好等于目标,返回第一个元素的坐标,函数结束;

2.第一个元素大于目标。那么目标就可能存在被旋转到数组后面的情况,这个时候,还要比較与数组中间元素的关系,这个时候又会有三种情况:

a.中间元素大于第一个元素,这个时候。目标可能存在于数组的后半段中,递归调用函数,寻找目标的坐标;
b.中间元素等于目标。返回中间元素的坐标,函数结束;
c.中间元素小于第一个元素。这个时候。又能够分为两种情况进行: (1).中间元素小于目标元素。那么目标元素可能存在于数组的后半段中,递归调用函数,寻找目标的坐标;
(2).中间元素大于目标元素。那么目标元素可能存在于数组的前半段中,递归调用函数。寻找目标的坐标;

3.第一个元素小于目标,这是也有三种情况须要考虑:

a.中间元素等于目标元素,返回中间元素的坐标,函数结束;
b.中间元素大于第一个元素,这个时候,也有两种情况要考虑: (1).中间元素大于目标,那么目标元素可能存在于数组的前半段中,递归调用函数,寻找目标的坐标;
(2).中间元素小于目标,那么目标元素可能存在于数组的后半段中,递归调用函数,寻找目标的坐标; c.中间元素小于第一个元素,那么目标元素可能存在于数组的前半段中,递归调用函数,寻找目标的坐标;

当然,还须要考虑数组的元素个数为0,1, 2,的情况,以及对于递归的过程中数组的起始位置坐标以及数组中元素的个数。这些才是这道题的难点所在,我也是调试了非常久才调通代码的。

三.演示样例代码

// 时间复杂度O(log n)。空间复杂度O(1)
#include <iostream> using namespace std; class Solution
{
public:
int SearchRotatedSortedArray(int A[], int n, int target)
{
int start = 0;
int end = n;
int middle = start + (end - start) / 2;
while (start != end)
{
if (target == A[middle])
return middle;
if (A[start] < A[middle])
{
if ((target < A[middle]) && (A[start] <= target))
end = middle;
else
start = middle + 1;
}
else
{
if ((target > A[middle]) && (target <= A[end - 1]))
start = middle + 1;
else
end = middle;
}
}
return -1; // 在数组中找不到目标元素时返回-1
}
};

四.体会

这答题的难点在于边界条件和递归过程中的数组的第一个元素的指针设置和数组元素个数的设置上面,边界条件常常是面试题考查的重点。

leetcode笔记:Search in Rotated Sorted Array的更多相关文章

  1. [LeetCode] 033. Search in Rotated Sorted Array (Hard) (C++)

    指数:[LeetCode] Leetcode 解决问题的指数 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 033. ...

  2. [array] leetcode - 33. Search in Rotated Sorted Array - Medium

    leetcode - 33. Search in Rotated Sorted Array - Medium descrition Suppose an array sorted in ascendi ...

  3. LeetCode 81 Search in Rotated Sorted Array II [binary search] <c++>

    LeetCode 81 Search in Rotated Sorted Array II [binary search] <c++> 给出排序好的一维有重复元素的数组,随机取一个位置断开 ...

  4. LeetCode 33 Search in Rotated Sorted Array [binary search] <c++>

    LeetCode 33 Search in Rotated Sorted Array [binary search] <c++> 给出排序好的一维无重复元素的数组,随机取一个位置断开,把前 ...

  5. [leetcode]81. Search in Rotated Sorted Array II旋转过有序数组里找目标值II(有重)

    This is a follow up problem to Search in Rotated Sorted Array, where nums may contain duplicates. 思路 ...

  6. Java for LeetCode 081 Search in Rotated Sorted Array II

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

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

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

  8. Leetcode系列-Search in Rotated Sorted Array

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

  9. LeetCode 81. Search in Rotated Sorted Array II(在旋转有序序列中搜索之二)

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

  10. LeetCode 33. Search in Rotated Sorted Array(在旋转有序序列中搜索)

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

随机推荐

  1. ascii - 在八进制,十进制,十六进制中的 ASCII 字符集编码

    描述 ASCII 是美国对于信息交换的标准代码,它是7位码,许多8位码(比如 ISO 8859-1, Linux 的默认字符集)容纳 ASCII 作为它们的下半部分.对应的国际 ASSII 是 ISO ...

  2. React和webpack解决 waiting for roots to load...to reload the inspector

    使用chrome调试工具,react-devtools总是显示 "waiting for roots to load...to reload the inspector" and ...

  3. 拼字符串 showArray.push(data); showArray.join(",")

    //---// var showColumns = getShowColsRows("table");// var showArray = [];// $.each(showCol ...

  4. vue工厂化完整项目目录

  5. 04Hibernate连接数据库环境配置

    Hibernate连接数据库环境配置

  6. IOS沙盒(sandbox)机制和文件操作

    IOS学习之IOS沙盒(sandbox)机制和文件操作   作者:totogo2010 ,发布于2012-9-21,来源:CSDN   目录: IOS学习之IOS沙盒(sandbox)机制和文件操作( ...

  7. delphi GDI+ [1]

    摘抄自:万一的博客 安装头文件:http://www.cnblogs.com/del/archive/2008/06/06/1215319.html 目录 基本使用方法(绘制直线) 绘制一组直线 绘制 ...

  8. 性能测试培训day1

    测试本质: 1构造测试数据和期望结果 2执行 3验证 自动化测试: 写完代码,单元测试测代码逻辑,单元测试搞清楚代码逻辑就行了(白盒测试)先静态,运行前用工具扫描BUG例如(a==11写成a=11), ...

  9. hdu4428(Coder)线段树

    Coder Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  10. Python之布尔

    Python之布尔(bool) 在计算机中的所用判断,都是用布尔的True和False来判断的. 条件成立:True ( 1 ) 条件不成立:False ( 0 ) 以下情况是False: [ ]:空 ...