【剑指Offer面试题】 九度OJ1386:旋转数组的最小数字
来源:互联网 发布:情定三生知夏的床戏 编辑:程序博客网 时间:2024/06/07 18:28
题目链接地址:
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****************************************************************/
1 0
- 九度OJ1386剑指offer面试题8:旋转数组的最小数字
- 【剑指Offer面试题】 九度OJ1386:旋转数组的最小数字
- 剑指offer第8题 旋转数组 九度OJ1386
- 【剑指offer】面试题8:旋转数组的最小数字
- 剑指offer面试题8:旋转数组的最小数字
- 剑指Offer:面试题8 :旋转数组的最小数字
- 《剑指offer》面试题8旋转数组的最小数字
- 《剑指Offer》之面试题旋转数组的最小数字
- 《剑指Offer》面试题8:旋转数组的最小数字
- 【剑指offer】 面试题8: 旋转数组的最小数字
- 《剑指Offer》面试题:旋转数组的最小数字
- 剑指offer面试题八:旋转数组的最小数字
- 旋转数组的最小数字(剑指offer面试题)
- 剑指offer-面试题8:旋转数组的最小数字
- 剑指offer-面试题8.旋转数组的最小数字
- 剑指offer面试题 旋转数组的最小数字
- 剑指offer面试题8:旋转数组的最小数字
- 【剑指offer】面试题8:旋转数组的最小数字
- oracle数据库在ibatis的批处理
- 初学iOS UI 用于交流与学习
- 内联成员函数与重载成员函数
- java入门相关
- 剑指Offer面试题7(Java版):用两个栈实现队列与用两个队列实现栈
- 【剑指Offer面试题】 九度OJ1386:旋转数组的最小数字
- Android中Application类用法
- ajax的接受之页面,一定要有echo,html页面的返回函数success才能正常运行
- 小应用大智慧-GDB调试
- 台湾国立大学机器学习基石.听课笔记(第四讲): 机器学习的可行性
- Gym 100703F Game of words 动态规划
- 学习Emacs
- gdb 多线程
- 【Matlab学习笔记】【函数学习】nargin 参数