【剑指Offer面试题】 九度OJ1386:旋转数组的最小数字

题目链接地址: ?pid=1386

题目1386:旋转数组的最小数字

时间限制:1 秒内存限制:32 兆特殊判题:否提交:6914解决:1534 题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入的第一行为一个整数n(1<= n<=1000000):代表旋转数组的元素个数。 输入的第二行包括n个整数,其中每个整数a的范围是(1<=a<=10000000)。 输出: 对应每个测试案例, 输出旋转数组中最小的元素。 样例输入: 5 3 4 5 1 2 样例输出: 1

思路分析:

这里没有采用书里的二分查找的方法,贪快直接遍历到第一个小于前一个数的位置就行了。 分析题目可知: 对于旋转了k位的数组,,可以分为两段有序的部分a[0 : (n – k)]和a[(n – k + 1) : n-2],最大元素为a[n – k],最小元素为a[n – k + 1]。 因此通过遍历旋转数组a[0,1,… n-1]找到两个递增子数组的交界处元素,如果该交界处元素a[i]满足a[i] < a[i – 1] (0<= i < n),那么这个元素a[i]就是旋转数组中的最小数字。

对于整个数组没旋转,那么会一直扫到数组结尾,可以进行特殊处理。不然性能下降。

时间复杂度为O(n – k)。 空间复杂度O(1)。

代码:【剑指Offer面试题】 九度OJ1386:旋转数组的最小数字———————————– Author:牧之丶 Date:2015年Email:bzhou84@163.com */ using namespace std;#define MAX 1000005//第2个递增序列的首元素就是数组中的最小元素void findMinValueInRotateArray(int a[],int n){}int main(){}/***/

对人性的弱点有清醒的认识,

【剑指Offer面试题】 九度OJ1386:旋转数组的最小数字

相关文章:

你感兴趣的文章:

标签云: