[33]Search in Rotated Sorted Array
2015-11-05 21:36
489 查看
【题目描述】
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e.,
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.
Subscribe to see which companies asked this question
【思路】
二分搜索。将数列从循环的地方分成左右两部分,分成三种情况考虑:
1.如果nums[mid]>nums[high],说明mid在左半部分
2.如果nums[mid]<nums[low],说明mid在右半部分
3.反之则说明数列未移动。
【代码】
class Solution {
public:
int search(vector<int>& nums, int target) {
int n=nums.size();
int low,high,mid;
low=0;
high=n-1;
while(low<=high){
mid=(low+high)/2;
if(nums[mid]==target) return mid;
if(nums[high]<nums[mid]){
if(nums[low]<=target&&nums[mid]>target) high=mid-1;
else low=mid+1;
}
else if(nums[low]>nums[mid]){
if(nums[mid]<target&&nums[high]>=target) low=mid+1;
else high=mid-1;
}
else{
if(nums[mid]<target) low=mid+1;
else high=mid-1;
}
}
return -1;
}
};
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e.,
0 1 2 4 5 6 7might 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.
Subscribe to see which companies asked this question
【思路】
二分搜索。将数列从循环的地方分成左右两部分,分成三种情况考虑:
1.如果nums[mid]>nums[high],说明mid在左半部分
2.如果nums[mid]<nums[low],说明mid在右半部分
3.反之则说明数列未移动。
【代码】
class Solution {
public:
int search(vector<int>& nums, int target) {
int n=nums.size();
int low,high,mid;
low=0;
high=n-1;
while(low<=high){
mid=(low+high)/2;
if(nums[mid]==target) return mid;
if(nums[high]<nums[mid]){
if(nums[low]<=target&&nums[mid]>target) high=mid-1;
else low=mid+1;
}
else if(nums[low]>nums[mid]){
if(nums[mid]<target&&nums[high]>=target) low=mid+1;
else high=mid-1;
}
else{
if(nums[mid]<target) low=mid+1;
else high=mid-1;
}
}
return -1;
}
};
相关文章推荐
- 数据结构实验之二叉树五:层序遍历
- 微信公众账号利用post方法调用接口实现方法
- KVM常用运维指令
- std::string用法总结
- 如何使用git推送本地文件到github
- 12 个非常实用的 jQuery 代码片段
- 最新hosts,更新hosts,可用
- 创建者模式Builder
- MySQL数据库中缓存管理的思路解析
- Mysql压缩包版的安装方法
- 常用icon以及color颜色RGB值和对应颜色效果图
- 寻找旋转排序数组中的最小值
- ios 屏幕截屏
- java各种排序总结及实现
- 猜图思路
- Java: 23种设计模式全解析之三
- linux 下 .sh 文件语法
- 朱老师嵌入式课程学习总结和感言
- 必懂java、android知识
- 杭电ACM1001