1. 程式人生 > 其它 >力扣81、搜尋旋轉排序陣列Ⅱ

力扣81、搜尋旋轉排序陣列Ⅱ

1、直接迴圈(4ms,90%;13.5MB,85%)

時間複雜度:O(n):迴圈次數

空間複雜度:O(1)

 1  bool search(vector<int>& nums, int target) {
 2         if(nums.empty())
 3         return false;
 4         int n=0;
 5         while(n<nums.size()){
 6             if(target==nums[n])
 7             return true;
 8             n++;
9 } 10 return false; 11 }

2、二分法(4ms,90%;13.4MB,98%)

時間複雜度:O(n):當所有的陣列元素都相等但和target不相等時需要訪問所有的位置

空間複雜度:O(1)

bool search(vector<int>& nums, int target) {
       if(nums.empty())
       return false;
       if(nums.size()==1)
       return nums[0]==target? true:false;
       
int left=0,right=nums.size()-1; int mid=0; while(left<=right){ mid=(left+right)/2; if(nums[mid]==target) return true; //注意不要寫成left==mid&&right==mid //如果三個下標對應的值都相等,無法判斷左邊還是右邊有序 //此時應該收縮範圍,只保留中間的下標 if(nums[left]==nums[mid]&&nums[right]==nums[mid]){ left
++; right--; } else if(nums[left]<=nums[mid]){ if(target>=nums[left]&&target<nums[mid]) right=mid-1; else left=mid+1; } else{ if(target>nums[mid]&&target<=nums[right]) left=mid+1; else right=mid-1; } } return false; }