Leetcode 33 Search in Rotated Sorted Array

55 阅读1分钟

Leetcode 链接

题解思路来源于leetcode中国区老师讲解

准备题(做此题前最好完成的题目):

704. Binary Search

153. Find Minimum in Rotated Sorted Array

思路

  • 关键字:排序、搜索

  • 模式识别: 有序或者部分有序,基本使用二分搜索及其变种

  • 算法描述: "丢弃"一半的数据

代码

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int left = 0, right = nums.size()-1;
        while(left<=right){
            int mid = (left + right)/2;
            if(nums[left] == target) return left;
            if(nums[right] == target) return right;
            if(nums[mid] == target) return mid;

            if(nums[left]<=nums[mid]){
                if(nums[left] <= target && target < nums[mid]){
                    right = mid-1;
                } else{
                    left = mid+1;
                }
                }else{
                    if(nums[mid] < target && target <= nums[right]){
                        left = mid+1;
                    }else{
                        right = mid-1;
                    }
                }
                }
                return -1;
    }
};

后续

这道题很遗憾的一点是真是差一点点就能够全靠自己写出来。"丢弃"一半的数据的思路是很重要的。和老师不一样的是没能正确识别一半的分界点。这次要丢弃的一半由mid和target双重决定。做leetcode时思路混乱就上来敲代码是一种不可取的投机行为。

有时候题目会提示: "You must write an algorithm with O(log n) runtime complexity." 这时候根据排序、搜索、半排序的线索快速确认使用二分搜索。