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

//二分法  
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;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容