跟进“搜索旋转排序数组”,假如有重复元素又将如何?
是否会影响运行时间复杂度?
如何影响?
为何会影响?
写出一个函数判断给定的目标值是否出现在数组中。
您在真实的面试中是否遇到过这个题?给出[3,4,4,5,7,0,1,2]和target=4,返回 true
分析:有重复数据还是很蛋疼的,重点在于消重,要使得A[l]严格大于A[r],这样就可以继续判断区间的单调性,从而二分
代码:
class Solution { /** * param A : an integer ratated sorted array * param target : an integer to be searched * return : an integer */ public: int search(vector<int> &A, int target) { // write your code here return search(A,target,0,A.size()-1); } int search(vector<int>&A,int target,int l,int r) { if(l>r) return 0; while(l<r&&A[l]==A[r]) l++; int mid = (l+r)/2; if(A[mid]==target) return true; if(A[l]<A[r]) { if(A[mid]>target) return search(A,target,l,mid-1); else return search(A,target,mid+1,r); } else if(A[mid]>=A[l]) { if(A[mid]>=target&&target>=A[l]) return search(A,target,l,mid-1); else return search(A,target,mid+1,r); } else { if(A[mid]<=target&&target<=A[r]) return search(A,target,mid+1,r); else return search(A,target,l,mid-1); } } };
原文地址:http://blog.csdn.net/wangyuquanliuli/article/details/46641899