旋转数组的最小元素
2017-04-11 10:39
211 查看
题目:把一个数组最开始的若干元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如: 数组{3,4,5,1,2}为数组{1,2,3,4,5}的一个旋转,该数组的最小值为1.
思路;可以借鉴二分查找。借助指向数组头尾的指针。比较,缩小范围。
#include<iostream>
using namespace std;
#include<assert.h>
int MinInorder(int* arr, int first, int end);
int Min(int* arr, int len)
{
assert(arr);
assert(len > 0);
int first = 0;
int end = len - 1;
int mid = first;//第一个元素就是最小值,直接返回
while (arr[first] >= arr[end])
{
if (end - first == 1)
{
mid = end;
break;
}
mid = (first + end) / 2;
// 如果 下标first ,end,mid 的值相同
if (arr[first] == arr[end] && arr[first] == arr[mid])
return MinInorder(arr, first, end);
if (arr[mid] >= arr[first])
first = mid;
else if (arr[mid] <= arr[end])
end = mid;
}
return arr[mid];
}
int MinInorder(int* arr, int first, int end)
{
int ret = arr[first];
for (int i = first + 1; i <= end; ++i)
{
if (ret > arr[i])
ret = arr[i];
}
return ret;
}
void Test()
{
int arr[] = { 1,0,1,1,1,1 };
int len = sizeof(arr) / sizeof(arr[0]);
int ret = Min(arr, len);
cout << ret << endl;
}
int main()
{
Test();
system("pause");
return 0;
}
思路;可以借鉴二分查找。借助指向数组头尾的指针。比较,缩小范围。
#include<iostream>
using namespace std;
#include<assert.h>
int MinInorder(int* arr, int first, int end);
int Min(int* arr, int len)
{
assert(arr);
assert(len > 0);
int first = 0;
int end = len - 1;
int mid = first;//第一个元素就是最小值,直接返回
while (arr[first] >= arr[end])
{
if (end - first == 1)
{
mid = end;
break;
}
mid = (first + end) / 2;
// 如果 下标first ,end,mid 的值相同
if (arr[first] == arr[end] && arr[first] == arr[mid])
return MinInorder(arr, first, end);
if (arr[mid] >= arr[first])
first = mid;
else if (arr[mid] <= arr[end])
end = mid;
}
return arr[mid];
}
int MinInorder(int* arr, int first, int end)
{
int ret = arr[first];
for (int i = first + 1; i <= end; ++i)
{
if (ret > arr[i])
ret = arr[i];
}
return ret;
}
void Test()
{
int arr[] = { 1,0,1,1,1,1 };
int len = sizeof(arr) / sizeof(arr[0]);
int ret = Min(arr, len);
cout << ret << endl;
}
int main()
{
Test();
system("pause");
return 0;
}
相关文章推荐
- 旋转数组的最小元素
- 旋转数组的最小元素
- 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。
- 42.旋转数组的最小元素[Get min value of rotated array]
- 旋转数组中的最小元素
- 程序员面试题精选100题(42)-旋转数组的最小元素
- 旋转数组的最小元素
- 程序员面试之 二分搜索 旋转数组的最小元素
- 程序员面试题目总结--数组(三)【旋转数组的最小数字、旋转数组中查找指定数、两个排序数组所有元素中间值、数组中重复次数最多的数、数组中出现次数超过一半的数】
- 旋转数组中的最小元素
- 微软等数据结构+算法面试100题(40)-- 旋转数组中的最小元素
- 旋转数组的最小元素
- 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素
- 求旋转数组的最小元素
- 旋转数组的最小元素
- 面试训练旋转数组的最小元素
- 旋转数组的最小元素
- 第六十九题(旋转数组中的最小元素)
- 查找旋转数组中的最小值元素(剑指offer8)
- 程序员面试题精选100题(42)-旋转数组的最小元素