Leetcode 33. Search in Rotated Sorted Array
2017-04-06 11:04
399 查看
题目如下:
Suppose an array sorted in ascending order 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.
即对于一个原始的非递减非重复序列,在某处旋转后变成两段有序区,左边区域值较大,右边区域值较小,给定一个target求其位置。
对于有序序列问题一般就是二分查找。
设区间a[low,high],其中间位置mid=(low+high)/2,下面分情况讨论:
1 target==a[mid]返回mid即可;
2 when a[low]<a[high],说明该区间已经是有序区,按照常见的有序区二分即可:
if target>a[mid],low=mid+1;
if target<a[mid],high=mid-1;
3 when a[mid]>=a[low],由旋主序列特性可知,此时中间位置在左边较大的序列
if target<a[low],说明target比左序区a[low...mid]值都小,low=mid+1;
if target>a[mid],说明target比a[loq...mid]都要大,low=mid+1;
else a[low]<=target<a[mid],high=mid-1;
4 when a[mid]<a[low],由旋主序列特性可知,此时中间位置在右边较小的序列
if target>a[high],说明target比右序区a[mid...high]值都大,high=mid-1;
if target<a[mid],说明target比a[mid...high]都要小,high=mid-1;
else a[mid]<target<=a[high],low=mid+1;
Suppose an array sorted in ascending order 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.
即对于一个原始的非递减非重复序列,在某处旋转后变成两段有序区,左边区域值较大,右边区域值较小,给定一个target求其位置。
对于有序序列问题一般就是二分查找。
设区间a[low,high],其中间位置mid=(low+high)/2,下面分情况讨论:
1 target==a[mid]返回mid即可;
2 when a[low]<a[high],说明该区间已经是有序区,按照常见的有序区二分即可:
if target>a[mid],low=mid+1;
if target<a[mid],high=mid-1;
3 when a[mid]>=a[low],由旋主序列特性可知,此时中间位置在左边较大的序列
if target<a[low],说明target比左序区a[low...mid]值都小,low=mid+1;
if target>a[mid],说明target比a[loq...mid]都要大,low=mid+1;
else a[low]<=target<a[mid],high=mid-1;
4 when a[mid]<a[low],由旋主序列特性可知,此时中间位置在右边较小的序列
if target>a[high],说明target比右序区a[mid...high]值都大,high=mid-1;
if target<a[mid],说明target比a[mid...high]都要小,high=mid-1;
else a[mid]<target<=a[high],low=mid+1;
int search(vector<int>& nums,int target){ int low=0,high=nums.size()-1; int mid; while(low<=high){ mid=(low+high)/2; if(target==nums[mid])return mid; if(nums[low]<nums[high]){if(target>nums[mid])low=mid+1; if(target<nums[mid])high=mid-1; }//low-high之间都是有序 else{ if(nums[mid]>=nums[low]){ if(target>nums[mid]||target<nums[low]) low=mid+1; else high=mid-1; }//mid处于左侧较大的有序区 else{ if(target<nums[mid]||target>nums[high])high=mid-1; else low=mid+1; }//mid处于右侧较小区域 }//Low-high之间是由两段有序区组成 } if(low==high&&nums[low]==target)return low; return -1;
相关文章推荐
- LeetCode --- 33. Search in Rotated Sorted Array
- [Leetcode] 33. Search in Rotated Sorted Array
- leetcode 33 -- Search in Rotated Sorted Array
- Search in Rotated Sorted Array - LeetCode 33
- [leetcode 33]Search in Rotated Sorted Array
- 33.search in rotated sorted array leetcode java
- leetcode 33: Search in Rotated Sorted Array
- [leetcode-33]Search in Rotated Sorted Array(C)
- leetcode 33 Search in Rotated Sorted Array
- LeetCode 33 — Search in Rotated Sorted Array(C++ Java Python)
- leetcode[33]Search in Rotated Sorted Array
- [Leetcode 33, Hard] 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 二叉查找(三)
- 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(排序旋转数组的查找) 解题思路和方法
- LeetCode 33, Search in Rotated Sorted Array-----Binary Search