63 搜索旋轉排序數組II
阿新 • • 發佈:2018-06-02
data IV else amp 遇到 nbsp tle AR https
原題網址:https://www.lintcode.com/problem/search-in-rotated-sorted-array-ii/description
描述
跟進“搜索旋轉排序數組”,假如有重復元素又將如何?
是否會影響運行時間復雜度?
如何影響?
為何會影響?
寫出一個函數判斷給定的目標值是否出現在數組中。
您在真實的面試中是否遇到過這個題?樣例
給出[3,4,4,5,7,0,1,2]和target=4,返回 true
標簽 二分法 排序數組 數組 思路:方法與搜索排序數組類似,只是多了一個重復判斷,如果 left 處元素與 mid 處元素相同,left~mid 部分的元素一定是相同的,可以直接跳過這部分去判斷 mid+1 ,即 left++; 元素重復會影響時間復雜度,因為重復是無法折半查找,而是以距離1步進,時間復雜度會變大。 AC代碼:classSolution { public: /** * @param A: an integer ratated sorted array and duplicates are allowed * @param target: An integer * @return: a boolean */ bool search(vector<int> &A, int target) { // write your code here if (A.empty()) { return false; } int size=A.size(); int left=0,right=size-1,mid; while(left<=right) { mid=(left+right)/2; if (A[mid]==target) { return true; } if (A[mid]>A[left]) { if (A[left]<=target&&target<A[mid]) { right=mid-1; } else { left=mid+1; } } else if (A[mid]<A[left]) if (target>A[mid]&&target<=A[right]) { left=mid+1; } else { right=mid-1; } } else//相等時順序查找; { left++; } } return false; } };
Mark一個資源:算法總結—二分搜索與旋轉排序數組
63 搜索旋轉排序數組II