题目:

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

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

分析:

跟旋转排序数组(rotated sorted array)有关的的问题,一般可以考虑二分的思路。

之前的总结见:

http://www.cnblogs.com/wangxiaobao/p/4915853.html

本题就是要搞清楚什么时候start = mid 什么时候end = mid即可,画图是想明白的最好的方法。

比如下面这幅很丑的图就能说明意思,左括号代表start = mid, 右括号代表 end = mid,星号是target的位置。

可以看出,start = mid

在 target > nums[0] (左图)的时候有 一种情况 即  nums[0] < nums[mid] < target;

在target < nums[0](右图)的时候有两种情况,即nums[mid] > nums[0] || nums[mid] < target;

其他情况就时end = mid了。

nums[0] ==target单独判断一下,这样后续判断条件清晰一些。

代码:

 class Solution {
public:
int search(vector<int>& nums, int target) {
int start = , end = nums.size() - ;
if (nums[] == target) {
return ;
}
while (start + < end) {
int mid = start + (end - start) / ;
if (nums[mid] == target) {
return mid;
}
else if ( (target > nums[] && (nums[mid] < target && nums[mid] > nums[] ))
|| (target < nums[] && (nums[mid] < target || nums[mid] > nums[])) ) {
start = mid;
}
else {
end = mid;
}
}
if (nums[start] == target) {
return start;
}
if (nums[end] == target) {
return end;
}
return -;
}
};

最新文章

  1. svm使用的一般步骤
  2. python新技能get——看!源!码!
  3. Java运算符优先级
  4. Apache Spark源码走读之16 -- spark repl实现详解
  5. Distinct&lt;TSource&gt;(IEqualityComparer&lt;TSource&gt; comparer) 根据列名来Distinct
  6. CodeForces Round #286 Div.2
  7. OC1_银行账户类
  8. Java反射获取类和对象信息全解析
  9. html系列教程--nav noscript option optgroup object
  10. Android判断当前系统语言
  11. json对象和json字符串
  12. 前端性能优化 —— reflow(回流)和repaint(重绘)
  13. 使用Idea从github上获取项目
  14. java 查看线程的信息
  15. python 元类(metaclass)
  16. String对象中的正则表达式
  17. Internet History, Technology and Security (Week⑨)
  18. vdp配置
  19. CentOS 6 &amp; 7 忘记root密码的修改方法
  20. Angular2 不明真相第一个Demo例子

热门文章

  1. Uva 11183 - Teen Girl Squad (最小树形图)
  2. html5 +css3 第一章学习和笔记
  3. Wisdombud.CommonTool及其应用
  4. C# 抽象类和接口的区别
  5. Castle IOC容器内幕故事(上)
  6. 索引的实现:B+树
  7. Oracle的体系结构
  8. 初始化css代码需要注意的
  9. Ext的Panel总结(好文章)
  10. rpm包的管理