Acwing 22. 旋转数组的最小数字

51 阅读1分钟

22. 旋转数组的最小数字 - AcWing题库

遍历 c++

class Solution {
public:
    int findMin(vector<int>& nums) {
     
     int min=INT_MAX;
     int min_n=0;
     if(num.size()==0)return -1;
     else
     {
         for(int i=0;i<nums.size();i++)
         {
              min_n=min(min_n,num);
         }
        
     }
    }
    return min_n;
};

二分 c

int findMin(int* nums, int numsSize) {
    if (numsSize == 0) {
        return -1; 
    }
    
    
    //去重,不去重也可以AC
    int k=0;
    while(nums[k]==nums[k+1])k++;
    while(nums[numsSize-1]==nums[k])numsSize--;
    
    
    
    //开始二分
    int l = 0;
    int r = numsSize - 1;
    
    while (l <= r) {
        int mid = (l + r) / 2;
        
        if (nums[mid] < nums[r]) {
            r = mid-1; 
        } else if (nums[mid] > nums[r]) {
            l = mid + 1; 
        } else {
            r--;  
        }
    }
    
   return nums[l];
}