leetcode_middle_85_33. Search in Rotated Sorted Array
2017-03-09 13:45
381 查看
题意:
将一个升序数组,从中切断,将切断点后面的序列拼接到前面。注:切断点也可能在最后一个数字之后,即数组保持升序不变。
分析:
对一个数组的顺序查找,时间是O( n ),想要比这慢,可以,二分查找是O( log n) 但是我们的二分查找是一个顺序数组,但是这是一个
*
*
*
*
*
*
*
这样的数组,可不可以二分呢?
我们来看看二分查找的本质,在于:每次能缩小一半的查找空间,从而提高效率。
那么,这个数组我们能不能判断其左右空间呢?是可以的。
分析一下就能发现,查找的点只会落在左上半段,或者右下半段两种,只要能够确定区间,就可以实现。
public class Solution {
public int search(int[] nums, int target) {
int low = 0;
int high = nums.length-1;
while(low<=high){
int mid = low + (high - low)/2;
if(nums[mid] == target)
return mid;
if(nums[mid] >= nums[low]){ //则一定在左上区间
if(target>=nums[low] && target<nums[mid]){
high = mid - 1;
}else{
low = mid + 1;
}
}else{ //则一定在右下区间
if(target>nums[mid] && target<=nums[high]){
low = mid + 1;
}else{
high = mid - 1;
}
}
}
return -1;
}
}
将一个升序数组,从中切断,将切断点后面的序列拼接到前面。注:切断点也可能在最后一个数字之后,即数组保持升序不变。
分析:
对一个数组的顺序查找,时间是O( n ),想要比这慢,可以,二分查找是O( log n) 但是我们的二分查找是一个顺序数组,但是这是一个
*
*
*
*
*
*
*
这样的数组,可不可以二分呢?
我们来看看二分查找的本质,在于:每次能缩小一半的查找空间,从而提高效率。
那么,这个数组我们能不能判断其左右空间呢?是可以的。
分析一下就能发现,查找的点只会落在左上半段,或者右下半段两种,只要能够确定区间,就可以实现。
public class Solution {
public int search(int[] nums, int target) {
int low = 0;
int high = nums.length-1;
while(low<=high){
int mid = low + (high - low)/2;
if(nums[mid] == target)
return mid;
if(nums[mid] >= nums[low]){ //则一定在左上区间
if(target>=nums[low] && target<nums[mid]){
high = mid - 1;
}else{
low = mid + 1;
}
}else{ //则一定在右下区间
if(target>nums[mid] && target<=nums[high]){
low = mid + 1;
}else{
high = mid - 1;
}
}
}
return -1;
}
}
相关文章推荐
- 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 problem 33 -- Search in Rotated Sorted Array
- 【leetcode】Search in Rotated Sorted Array II(middle)☆
- leetcode 33 Search in Rotated Sorted Array
- LeetCode 33, Search in Rotated Sorted Array-----Binary Search
- Search in Rotated Sorted Array - LeetCode 33
- LeetCode 33 — Search in Rotated Sorted Array(C++ Java Python)
- [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 (C,C++,Java,Python)
- LeetCode(33)Search in Rotated Sorted Array
- leetcode 33: Search in Rotated Sorted Array
- leetCode 33.Search in Rotated Sorted Array(排序旋转数组的查找) 解题思路和方法