美文网首页
面试题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