Search in Rotated Sorted Array
程序员文章站
2022-07-15 19:37:21
...
解析:这道题很明显就是二分查找,但和二分查找有所不同,因为序列中的元素只是部分有序的,难点在于如何定位到部分有序的序列
观察可知:由于序列的元素是不重复的,故若当前位置的元素小于或者等于右边缘的元素,那么,从该位置到右边缘元素的序列就是有序序列;反之,则左边缘的元素到该位置的元素的序列是有序序列
1.若nums[mid] < nums[right],那么mid-right这段序列就是有序序列,只需判断target是否在这个范围之内,如果位于,则按照二分查找进行查找就行;若不在,则target就位于left-mid范围
2.反之, left-mid这段序列就是有序序列,只需判断target是否在这个范围之内,如果位于,则按照二分查找进行查找就行;若不在,则target就位于mid-right范围
class Solution {
public:
int search(vector<int>& nums, int target) {
if (nums.empty()) return -1;
int left = 0;
int right = nums.size() - 1;
while (left <= right){
int mid = (left + right) / 2;
if (nums[mid] == target) return mid;
if (nums[mid] < nums[right]){
if (target > nums[mid] && target <= nums[right]){
left = mid + 1;
}
else{
right = mid - 1;
}
}
else{
if (target >= nums[left] && target < nums[mid]){
right = mid - 1;
}
else{
left = mid + 1;
}
}
}
return -1;
}
};
[1]https://blog.csdn.net/linhuanmars/article/details/20525681
推荐阅读
-
php array_search() 函数使用
-
【LeetCode】Two Sum & Two Sum II - Input array is sorted & Two Sum IV - Input is a BST
-
php数组函数序列之array_search()- 按元素值返回键名
-
Convert Sorted Array to Binary Search Tree
-
【一天一道LeetCode】#26. Remove Duplicates from Sorted Array
-
php使用array_search函数实现数组查找的方法
-
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
-
167. Two Sum II - Input array is sorted [medium] (Python)
-
php利用array_search与array_column实现二维数组查找
-
LeetCode 33. Search in Rotated Sorted Array && 81. Search in Rotated Sorted Array II