[leetcode][search] Search in Rotated Sorted Array II

来源:互联网 发布:手机怎样申请淘宝小号 编辑:程序博客网 时间:2024/09/21 06:32

题目:

Follow up for "Search in Rotated Sorted Array":
What if duplicates are allowed?

Would this affect the run-time complexity? How and why?

Write a function to determine if a given target is in the array.

class Solution {public:    bool search(vector<int>& nums, int target) {        if(nums.empty()) return -1;        return searchCore(nums, 0, nums.size()-1, target);    }private:    bool searchCore(vector<int>& nums, int start, int end, int target){        if(start > end) return false;        if(start == end) return nums[start] == target ? true : false;        int mid = (start + end) >> 1;        if(nums[mid] == target) return true;         if(nums[start] >= nums[end]){//当首位元素相等时无法判读start和end之间是否存在pivot,所以两边都得查找            int ret = searchCore(nums, start, mid-1, target);            if(false == ret){                ret = searchCore(nums, mid+1, end, target);            }            return ret;        }        else{            if(nums[mid] > target) return searchCore(nums, start, mid-1, target);            else return searchCore(nums, mid+1, end, target);        }    }};

注:如果数组中存在重复值,会影响算法的时间复杂度,O(logn)->O(n)

因为两端点值相等时,无法判断target在哪边,所以两边都得找

0 0
原创粉丝点击