面试题8:输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。
来源:互联网 发布:淘宝售中流程 编辑:程序博客网 时间:2024/05/17 02:51
/*把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如shuzu{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小数值为1。*/#include "stdafx.h"#include <exception>//#include <iostream>//using namespace std;int MinInOrder(int* numbers, int index1, int index2);int Min(int *numbers, int length){if(numbers == NULL || length <= 0)throw new std::exception("Invalid parameters");int index1 = 0;int index2 = length - 1;int indexMid = index1;while(numbers[index1] >= numbers[index2]){ // 如果index1和index2指向相邻的两个数, // 则index1指向第一个递增子数组的最后一个数字, // index2指向第二个子数组的第一个数字,也就是数组中的最小数字if(index2 - index1 == 1){indexMid = index2;break;}// 如果下标为index1、index2和indexMid指向的三个数字相等, // 则只能顺序查找indexMid = (index1 + index2) / 2;if(numbers[index1] == numbers[index2] && numbers[indexMid] == numbers[index1])return MinInOrder(numbers, index1, index2);// 缩小查找范围if(numbers[indexMid] >= numbers[index1])index1 = indexMid;else if(numbers[indexMid] <= numbers[index2])index2 = indexMid;;}return numbers[indexMid];}int MinInOrder(int* numbers, int index1, int index2){int result = numbers[index1];for(int i = index1 + 1; i <= index2; ++i){if(result > numbers[i])result = numbers[i];}return result;}// ====================测试代码====================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");printf("最小的数字是:%d\n", result);}elseprintf("\tfailed\n");}catch(...){if(numbers == NULL)printf("Test failed.\n");elseprintf("Test passed.\n");}}int _tmain(int argc, _TCHAR * 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);system("pause");return 0;}
0 0
- 面试题8:输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。
- 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素
- 【c语言】输入一个递增排序的数组的一个旋转,输出旋转数组中的最小元素
- [经典面试题]输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。
- 输出一个为递增排序数组的旋转数组中的最小元素——8
- 【C语言】求旋转数组的最小数字,输入一个递增排序的数组的一个旋转,输出其最小元素
- 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组
- 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
- 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。
- 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数
- 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数
- 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数
- 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数
- 8+查找一个旋转数组的最小元素
- java面试题:输出旋转数组的最小元素(剑指offer)
- 求旋转数组的最小元素(把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3
- 面试题:旋转数组的最小数字
- java实现把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如{3,4,5,1,2}为{1,2,3,4,5}
- 资源网站整理
- Spring Boot实践应用开发(9)
- 发表SCI或EI类英文文章的一些投稿经验[转载]
- java IO流学习总结
- 2012年NOIP提高组 借教室
- 面试题8:输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。
- LeetCode Algorithms #283 <Move Zeroes>
- 2013年NOIP提高组 火柴排队
- 显卡驱动停止服务或直接黑屏的解决办法
- 面试题——存储过程和函数的区别
- 【IOS 开发学习总结-OC-40】★★ios开发之事件机制——控件获取方式与事件处理方式
- 2013年NOIP提高组 积木大赛
- 安卓定位问题
- 英语语法 简单式的过去时间