码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-07-27 21:10:47      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:旋转数组   剑指offer   面试题   

题目链接地址:
http://ac.jobdu.com/problem.php?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 
**********************************/ 
#include<stdio.h>
#include<string>
#include<stack>
#include <iostream>
using namespace std;
#define MAX 1000005


//第2个递增序列的首元素就是数组中的最小元素

void findMinValueInRotateArray(int a[],int n)
{
    int i;
    int min = a[0];        // 初始array[0]就是最小元素
    for(i = 0;i < n - 1;i++)
    {
        if(a[i] > a[i + 1])
        {
            min = a[i + 1];
            break;
        }
    }
     printf("%d\n",min);  
}

int main()
{
    int n;
    while(EOF != scanf("%d",&n))
    {
        int a[MAX];
        for(int i = 0;i < n;i++)
        {
            scanf("%d",&a[i]);  
        }
        findMinValueInRotateArray(a,n);
    }
    return 0;
}

/**************************************************************
    Problem: 1386
    Language: C++
    Result: Accepted
    Time:670 ms
    Memory:5356 kb
****************************************************************/

版权声明:本文为博主原创文章,未经博主允许不得转载。

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

标签:旋转数组   剑指offer   面试题   

原文地址:http://blog.csdn.net/zhoubin1992/article/details/47089357

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!