本文主要是介绍LeetCoder 33. Search in Rotated Sorted Array(二分),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
是把一个升序的数组,前面的连续的一部分(可以是空)放在数组的后面,然后再这个数组这中找一个给出的值,数组中不存在重复的元素。
这个题目也是《剑指offer》二分查找的一道例题
class Solution {
public:int search(vector<int>& nums, int target) {int l = 0, r = nums.size()-1;while(l <= r) {int mid = l+r>>1;if(nums[mid] == target) return mid;if(target < nums[mid]) {if(nums[mid] < nums[r]) r = mid - 1; // 右半部分是有序的else { // 否则 左边是有序的//当目标值小于左边的所有元素, 说明只能在右端了if(target < nums[l]) //(也就是左右端都是有序的, 但是目标值小于中间值,但是目标值却在数组中的右边) 例如2个数字,3 1 的时候l = mid + 1;else r = mid - 1;}}else {if(nums[l] < nums[mid]) l = mid + 1;else {if(target > nums[r])r = mid - 1;else l = mid + 1;}}}return -1;}
};
这篇关于LeetCoder 33. Search in Rotated Sorted Array(二分)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!