33.Search in Rotated Sorted Array
来源:互联网 发布:淘宝卖家和买家都被骗 编辑:程序博客网 时间:2024/06/14 04:46
33.Search in Rotated Sorted Array
2017-03-16
- 直接搜应该也可以,但既然是有序的,大约是可以利用一下二分法
- 关键就是二分法怎么在这种特殊的情况下进行改进
- 本作品采用“Creative Commons 署名-非商业性使用-相同方式共享 3.0 Unported
(cc by-nc-sa)”进行许可。http://creativecommons.org/licenses/by-nc-sa/3.0/ - 所有代码参考:LeetCode题解,151道题完整版
version 1:
- 和普通二分法不同的地方:mid位置不是目标元素时,两种可能:
- 4 5 6 7 0 1 2这种,绕支点旋转过后的有序数组的前半部分较长,又有两种可能:
- 目标元素就在first和mid之间,更新last
- 目标元素不在first和mid之间,更新first
- 5 6 7 0 1 2 4这种,绕支点旋转过后的有序数组的后半部分较短,两种可能:
- 目标元素在mid和last之间,更新first
- 目标元素不在mid和last之间,更新last
- 要注意的一点是last是最后一个元素的后一个位置
class Solution{public: int search(vector<int>& nums, int target) { int first = 0, last = nums.size(); while(first != last) { const int mid = first + (last - first) / 2; if(nums[mid] == target) return mid; if(nums[first] <= nums[mid]) { if(nums[first] <= target && target < nums[mid]) last = mid;//要注意last事实上是最后一个元素的后一个位置,所以并不是mid-1 else first = mid+1; } else { if(nums[mid] < target && target <= nums[last-1]) first = mid+1; else last = mid; } } return -1; }};
分析:
- 时间复杂度是O(logn),空间复杂度O(1)
- 难点在于目标元素不在mid位置时如何更新边界
-FIN-
0 0
- [LeetCode]33.Search in Rotated Sorted Array
- LeetCode --- 33. Search in Rotated Sorted Array
- LeetCode 33.Search in Rotated Sorted Array
- [Leetcode] 33. Search in Rotated Sorted Array
- 33.Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- Leetcode-33.Search in Rotated Sorted Array.
- [leetcode] 33. Search in Rotated Sorted Array
- Leetcode 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array
- Android使用Retrofit2.0和RxJava2.0处理网络请求
- 二分图最大匹配算法模板
- C语言基础 break continue语句应用
- c++输出控制(360例题)
- Java设计模式之观察者模式
- 33.Search in Rotated Sorted Array
- QThread类理解
- Python基本数据类型简单介绍
- 用 BitArray 来编写埃拉托斯特尼筛法
- 技术的正宗与野路子
- static作用(C/C++)
- Photoshop cs5 基础教程 形状图层的布尔运算
- Android Studio Gradle多渠道打包(动态设定App名称,应用图标,背景图片,状态栏颜色)、配置签名文件
- [学习小笔记] hibernate的简单数据库查询