p118 旋转有序数组的搜索(leetcode 33)
一:解题思路
这个题目是二分搜索的一道变形题目。比较关键的一点是,需要判断mid是落在左边的子数组上,还是落在右边的子数组上。
Time:O(log(n)),Space:O(1)
二:完整代码示例 (C++版和Java版)
C++:
class Solution { public: int search(vector<int>& nums, int target) { int low = 0, high = nums.size() - 1; while (low <= high) { int mid = low + (high-low)/2; if (nums[mid] == target) return mid; else if (nums[mid] >= nums[low]) { if (target < nums[mid] && target >= nums[low]) high = mid - 1; else low = mid + 1; } else { if (target > nums[mid] && target <= nums[high]) low = mid + 1; else high = mid - 1; } } return -1; } };
Java:
class Solution { public int search(int[] nums, int target) { int low=0,high=nums.length-1; while (low<=high) { int mid=low+(high-low)/2; if(nums[mid]==target) return mid; else if(nums[mid]>=nums[low]) { if(target<nums[mid] && target>=nums[low]) high=mid-1; else low=mid+1; } else { if(target>nums[mid] && target<=nums[high]) low=mid+1; else high=mid-1; } } return -1; } }
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号