LeetCode:33. Search in Rotated Sorted Array
在类似有序序列7,8,9,0,1,2,3,4中查找一个给定的数,没有重复数字
1,顺序查找
2,二分查找
类似序列的特点是由一个最大数分成了两个有序序列,例如例子中是9把原序列分成了7,8,9和0,1,2,3,4,而二分查找的特点是数列必须有序,而且中间值特别重要
这里用到了分类讨论,总共有两层分类,
第一层分类是中间值是左侧大数列的,还是右侧小数列的
第二层分类是所查数字是在左侧还是右侧
这里主要是分类思想的应用,尤为重要,分类的标准是中间值是偏向大数列还是小数列,偏向这两个字尤为值得思考
所写代码如下:
class Solution {
public:
int search(vector<int>& nums, int target) {
int low,high;
int media;
low = 0;
high = nums.size() - 1;
while(low <= high){
media = (high+low) / 2;
if(nums[media] == target)
return media;
if(nums[media] < nums[high])
if(nums[media] < target && target <= nums[high])
low = media + 1;
else
high = media - 1;
else
if(nums[low] <= target && target < nums[media])
high = media - 1;
else
low = media + 1;
}
return -1;
}
};
3,多次二分查找
链接博客地址:http://www.cnblogs.com/ganganloveu/p/4148554.html

浙公网安备 33010602011771号