Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e.,0 1 2 4 5 6 7might become4 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.

题意:在以某点旋转以后的有序数租中找目标值。数组中没有重复的元素

思路:刚开始是否是求旋转之后(或者之前的)的目标值在数组中的下标,然后就写了一个遍历全数组的简单方法,发现是求现数组的下标(即旋转之后的)。当然若是直接遍历一遍数组,也可以找到,时间复杂为O(n)。题目给的原意不是这样的。所以尝试二分查找,发现当中间位置所对应的值小于最右边时,则,右边的是非降序列,此时只要判断目标值是否在这个区间内(如何判断?因为这段是非降的,所以只要取其首尾两个值和目标值对比即可),若在这个区间内,则对此区间进行下一次二分查找,若不在,则对左边进行二分查找;同理当中间值大于最右边值时,左边为非降序的,剩下的一样。

代码如下:

 class Solution {
public:
int search(int A[], int n, int target)
{
if(n==) return -;
int lo=,hi=n-;
while(lo<=hi)
{
int mid=(lo+hi)/;
if(A[mid]==target)
return mid;
else if(A[mid]<A[hi])
{
if(A[mid]<target&&A[hi]>=target)
lo=mid+;
else
hi=mid-;
}
else
{
if(A[lo]<=target&&A[mid]>target)
hi=mid-;
else
lo=mid+;
}
}
return -;
}
};

最新文章

  1. linux c 笔记-3 c语言基础知识
  2. 如何使用Javascript判断浏览器终端设备
  3. NSOperation
  4. [ACM_其他] 总和不小于S的连续子序列的长度的最小值——尺缩法
  5. 使用System.Timers.Timer类实现程序定时执行
  6. call和apply方法的理解
  7. 读取和存储文本文件,UTF-8和GB2312通用的函数
  8. this is it
  9. 最全Oracle环境搭建之.NET程序员初遇Oracle
  10. JavaScript设计模式(6)-门面模式
  11. WSL(Windows Subsystem for Linux)--Pico Process Overview
  12. The King’s Problem HDU - 3861(连通图 缩点 匹配)
  13. pandas处理时间序列(3):重采样与频率转换
  14. 第二次Scrum冲刺——Life in CCSU
  15. LeetCode:152_Maximum Product Subarray | 最大乘积连续子数组 | Medium
  16. 微信小程序--canvas画布实现图片的编辑
  17. 阿里云 ECS 迁移到七牛 QVM 记
  18. JQuery UI之Autocomplete(4)多值输入、远程缓存与组合框
  19. mysql Keepalived 实践
  20. spring 过滤器

热门文章

  1. oracle_列转行
  2. hdu1069Monkey and Banana(动态规划)
  3. HTTP基本定义
  4. ADO.NET基础学习-----四种模型,防止SQL注入
  5. Java注解的基本原理
  6. vmware centOS上网配置笔记
  7. Solidity中的基本类型转换
  8. Java内存管理特点
  9. Code obfuscatio (翻译!)
  10. 《学习OpenCV》课后习题解答4