1. 程式人生 > >63 搜索旋轉排序數組II

63 搜索旋轉排序數組II

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代碼:
class
Solution { 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