美文网首页
面试题11. 旋转数组的最小数字 C实现

面试题11. 旋转数组的最小数字 C实现

作者: Summit_yp | 来源:发表于2020-05-24 18:54 被阅读0次
    //二分法  
    int minArray(int* numbers, int numbersSize){
      int left = 0;
      int right = numbersSize - 1;
      while (left < right) {
        int mid = (left + right) / 2;
        if (numbers[mid] > numbers[right]) {
          left = mid + 1;
        }
        else if (numbers[mid] == numbers[right] && numbers[mid] == numbers[left]) {
            left += 1;
            right -= 1;
        }
        else {
          right = mid;
        }
      }
      return numbers[left];
     
    }
    
    //前后齐头并进
    int minArray1(int* numbers, int numbersSize){
        int ans = numbers[0];
        int left = 0;
        int right = numbersSize - 1;
        int mid = (numbersSize + 1) / 2;
        while (left != mid) {
            if (ans > numbers[left]) {
                ans = numbers[left];
            }
            if (ans > numbers[right]) {
                ans = numbers[right];
            }
            left++;
            right--;
        }
        return ans;
    }
    

    相关文章

      网友评论

          本文标题:面试题11. 旋转数组的最小数字 C实现

          本文链接:https://www.haomeiwen.com/subject/swijahtx.html