一.题目描写叙述

二.解题技巧

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

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

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;elsestart = middle + 1;}else{if ((target > A[middle]) && (target <= A[end - 1]))start = middle + 1;elseend = middle;}}return -1; // 在数组中找不到目标元素时返回-1}
};

四.体会

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

转载于:https://www.cnblogs.com/gavanwanggw/p/7159502.html

leetcode笔记:Search in Rotated Sorted Array相关推荐

  1. LeetCode 33. Search in Rotated Sorted Array

    问题链接 LeetCode 33. Search in Rotated Sorted Array 题目解析 给定一个 "升序" 的 无重复 数组,从中寻找目标值."升序& ...

  2. 【leetcode】Search in Rotated Sorted Array II(middle)☆

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

  3. leetcode 81 Search in Rotated Sorted Array II ----- java

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

  4. [Leetcode] 33. 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  ...

  5. [LeetCode] 81. Search in Rotated Sorted Array II

    题目: Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. ( ...

  6. LeetCode Search in Rotated Sorted Array II

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

  7. LeetCode Search in Rotated Sorted Array II -- 有重复的旋转序列搜索

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

  8. LeetCode Online Judge 题目C# 练习 - Search in Rotated Sorted Array II

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

  9. leetcode - Search in Rotated Sorted Array II

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

  10. [算法题] Search in Rotated Sorted Array ii

    题目内容 题目来源:LeetCode Suppose an array sorted in ascending order is rotated at some pivot unknown to yo ...

最新文章

  1. 【PAT乙级】1072 开学寄语 (20 分)
  2. u盘读写测试_关于闪迪u盘cz880速度测试
  3. Linux系统中fflush,sync,syncfs,fdatasync,fsync的比较
  4. [NOI2017]泳池
  5. 二维数组求最小值_05-最大子矩形-最大值减去最小值小于或等于num的子数组数量...
  6. Akka框架——第一节:并发编程简介
  7. Java线程同步的一些例子
  8. Centos7上kvm虚拟化自定义NAT网络
  9. 中间件配置文件-redis
  10. LCA--最近公共祖先
  11. 数据恢复的学习旅程开始
  12. kdj买卖指标公式源码_八字kdj股票技术指标公式源码(图解)
  13. 2021年软件评测师新版考试大纲
  14. 遗传算法matlab工具箱及其应用
  15. 利用python调用百度api实现黑白图像处理
  16. android opengl美颜功能,Android 关于美颜/滤镜 利用PBO从OpenGL录制视频
  17. 卸载office2010安装包时提示语言不受系统支持
  18. 微信小程序跳转美团外卖小程序时出现白屏解决demo
  19. ESXI6.7.0 升级到7.0U3f(2022年7月12 更新)
  20. PCI8524 并行8Ch24Bits100Ksps高精度数据采集卡

热门文章

  1. 测试lazy_enable_if的所有变体
  2. boost::callable_traits的is_rvalue_reference_member的测试程序
  3. Boost:获取随机数的实例
  4. DCMTK:将XML文档转换为DICOM文件或数据集
  5. VTK:Utilities之VectorArrayKnownLength
  6. VTK:PolyData之IsoLines
  7. OpenCV非线性可分离数据的支持向量机的实例(附完整代码)
  8. 集成QML和C ++
  9. Qt Creator将应用程序部署到通用远程Linux设备
  10. OpenGL 具有深度恢复的SSAO