题目:
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.
题意:要求与Search in Rotated Sorted Array题目类似。如果提供给的数组中允许存在重复元素该如何解决?
重复元素会不会影响运行时间复杂度?为什么?怎样影响的?
写一个功能函数去检测。
思路:
允许重复元素,则上一题中如果A[m]>=A[l], 那么[l,m] 为递增序列的假设就不能成立了,比如[1,3,1,1,1]。
如果A[m]>=A[l] 不能确定递增,那就把它拆分成两个条件:
• 若A[m]>A[l],则区间[l,m] 一定递增
• 若A[m]==A[l] 确定不了,那就l++,往下看一步即可。
转载地址:LeetCode 题解 https://github.com/soulmachine/leetcode
代码:8ms
class Solution { public: bool search(vector<int>& nums, int target) { int first = 0; int last = nums.size(); while(first!=last){ const int mid = first + (last-first)/2; if(nums[mid]==target){ return true; } if(nums[first]<nums[mid]){ if(nums[first]<=target && target<nums[mid]){ last = mid; }else{ first = mid+1; } }else if(nums[first]>nums[mid]){ if(nums[mid]<target && target<=nums[last-1]){ first = mid+1; }else{ last = mid; } }else{ first++; } } return false; } };