题目要求:输出旋转数组的最小数字
解答:(没有考虑特殊情况的粗略答案)
#include <iostream>
using namespace std;
void PrintMinNumber(int* arr, int length) {
int i = 0;
for (;i < length; i++) {
if (arr[i] < arr[0]) {
cout << arr[i] << endl;
break;
}
}
if (i == length)
cout << arr[0] << endl;
}
void PrintMinNumber_Way2(int* arr, int length) {
int index1 = 0;
int index2 = length - 1;
int index_mid = index1;
while (arr[index1]>=arr[index2]) {
if (index2 - index1 == 1)
{
index_mid = index2;
break;
}
index_mid = (index1 + index2) / 2;
if (arr[index_mid] >= arr[index1])
index1 = index_mid;
else
index2 = index_mid;
}
cout << arr[index_mid] << endl;
}
int main() {
int arr[] = { 5,6,1,2,3,4 };
PrintMinNumber_Way2(arr, 6);
while (1);
return 0;
}
本文介绍了一种在已知数组被旋转的情况下查找最小元素的方法。提供了两种不同的算法实现:一种是通过遍历数组来找到最小值;另一种是采用二分查找的方式进行优化,提高了查找效率。
969

被折叠的 条评论
为什么被折叠?



