leetcode_c++:Search in Rotated Sorted Array(033)
2016-05-17 22:59
603 查看
题目
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.
算法
二分搜索的变形1. 通过中间元素和左右元素判断,判断 那一个部分有血
2. 如果左半部分有序,目标值落在有序区间,移动右指针,因为无序部分要么比中间大,要么小;如果目标值不在有序区间,则移动左指针
3. 右半部分有序,目标值落在有序区间里,那么移动做指针,抛弃左指针;如果目标值不在有序区间,抛弃右半部分,移动有指针
复杂度
o(lgn)class Solution{ public: int search(vector<int> &nums,int target){ int left=0,right=nums.size(); while(left!=right){ int mid = left+(right-left)/2; if(nums[mid]==target) return mid; if(nums[mid]>=nums[left]){ //[left~right] is unrotated sorted if(nums[left]<=target && target <nums[mid]) right=mid; else left=mid+1; }else{ if(nums[mid]<target && target <=nums[right-1]) left=mid+1; else right=mid; } } return -1; } };
相关文章推荐
- C++中getline函数用法(修正调试ok)
- 拓扑序列 C++实现
- 2013蓝桥决赛C/C++B组
- C++ Primer 第五版 练习 3.21,3.24
- 内存角度探寻C++面向对象 之 继承、多态
- 基于MySQL Connector/C++的数据库连接池
- C++ 运算符重载
- 单例模式-c++实现
- 库函数和系统调用
- 第8周 C语言及程序设计提高例程-31 编制自己的字符串函数
- c语言学生管理
- C语言游戏和代码
- 对Windows平台C程序内存分布研究及安全性分析
- 一起talk C栗子吧(第一百五十一回:C语言实例--socket通信地址)
- C++ string类型详解
- C++走向远洋——50(Time类中的运算符重载、一目,二目比较运算符、二目赋值运算符、二目加减法运算符)
- (未总结完成)C++中的对象放在哪里?
- C++中负数是真还是假?
- c++中vector的用法详解
- C++实现委托机制(三)——lambda表达式封装