旋转数组的最小数字
来源:互联网 发布:淘宝售后评价解释话术 编辑:程序博客网 时间:2024/06/16 16:38
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
#include <iostream>using namespace std;int midInOrder( int *arr,int low,int high){int min=arr[low];for(int i=low; i < high; i++)if(arr[i] < min)min = arr[i];return min;}int Min(int* arr, int length){if(arr == NULL || length <=0)throw exception("Invalid input");int low = 0;int high = length-1;int mid = low;while(arr[low] >= arr[high]){if(high - low == 1)return arr[high];mid = (low + high)/2;if(arr[low] == arr[mid] && arr[high] == arr[mid])return midInOrder(arr,low,high);if(arr[low] >= arr[mid])high = mid;elselow = mid;}return arr[mid];}
// ====================测试代码====================void Test(int* numbers, int length, int expected){ int result = 0; try { result = Min(numbers, length); for(int i = 0; i < length; ++i) printf("%d ", numbers[i]); if(result == expected) printf("\tpassed\n"); else printf("\tfailed\n"); } catch (...) { if(numbers == NULL) printf("Test passed.\n"); else printf("Test failed.\n"); }}int main(int argc, char* argv[]){ // 典型输入,单调升序的数组的一个旋转 int array1[] = {3, 4, 5, 1, 2}; Test(array1, sizeof(array1) / sizeof(int), 1); // 有重复数字,并且重复的数字刚好的最小的数字 int array2[] = {3, 4, 5, 1, 1, 2}; Test(array2, sizeof(array2) / sizeof(int), 1); // 有重复数字,但重复的数字不是第一个数字和最后一个数字 int array3[] = {3, 4, 5, 1, 2, 2}; Test(array3, sizeof(array3) / sizeof(int), 1); // 有重复的数字,并且重复的数字刚好是第一个数字和最后一个数字 int array4[] = {1, 0, 1, 1, 1}; Test(array4, sizeof(array4) / sizeof(int), 0); // 单调升序数组,旋转0个元素,也就是单调升序数组本身 int array5[] = {1, 2, 3, 4, 5}; Test(array5, sizeof(array5) / sizeof(int), 1); // 数组中只有一个数字 int array6[] = {2}; Test(array6, sizeof(array6) / sizeof(int), 2); // 输入NULL Test(NULL, 0, 0); return 0;}
0 0
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 关于对初学者ps合成工具使用的问答
- 最大似然估计学习总结
- 有一个类为ClassA,有一个类为ClassB,在ClassB中有一个方法b,此方法抛出异常,在ClassA类中有一个方法a,请在这个方法中调用b,然后抛出异常。在客户端有一个类为TestC,有一个方
- android TextView中文字通过SpannableString设置属性
- C++的引用语法
- 旋转数组的最小数字
- 计算机网络 之 IP地址、子网掩码与默认网关
- 黑马程序员——010——JavaAPI②(集合框架(List之ArrayList)、迭代器、枚举)
- 编写三各类Ticket、SealWindow、TicketSealCenter分别代表票信息、售票窗口、售票中心。售票中心分配一定数量的票,由若干个售票窗口进行出售,利用你所学的线程知识来模拟此售票过
- Android 自动注释,导入模板文件
- POJ1503Integer Inquiry高精度的加法
- 单一控制器实现员工信息管理
- Light OJ 1407 - Explosion 【2-sat之 3布尔变量的处理 — 枚举所有状态判断是否存在可行解 + 反向输出可行解】【好题】
- jdbc ,FetchSize