【剑指Offer面试编程题】题目1386:旋转数组的最小数字--九度OJ
2024-09-07 01:43:40
- 题目描述:
-
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{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
【解题思路】本题可以采用投机取巧的方法来完成,由于所有输入数据都必须要读入,题目的旋转数组的最小元素即可以看做从所有输入元素中寻找最小元素。这样的话,我们可以再输入元素的同时确定最小元素,如果当前输入元素比目标元素小,更新目标元素为当前输入值,继续输入。输入完成后,最小元素的值将保存在目标元素里面。
当然,本题的初衷不是这样的。本题的输入应该是第一个递增序列加上第二递增序列,而最小的元素即第二个递增序列的头元素。所以寻找到第二个递增序列的头元素即可解答该题。第二个递增序列的头元素也很好找,当发现当前输入的元素比之前的元素小时,该元素即为所找元素。
AC code:
#include <cstdio>
using namespace std; int main()
{
int n,tt,recod=10000002;
while(scanf("%d",&n)!=EOF)
{
recod=10000002;
for(int i=0;i<n;++i)
{
scanf("%d",&tt);
if(tt<recod)
recod=tt;
}
printf("%d\n",recod);
}
return 0;
}
/**************************************************************
Problem: 1386
User: huo_yao
Language: C++
Result: Accepted
Time:650 ms
Memory:1020 kb
****************************************************************/
题目链接:http://ac.jobdu.com/problem.php?pid=1386
最新文章
- hdu4970 Killing Monsters (差分数列)
- What is the difference between position: static,relative,absolute,fixed
- Pytho中两种方式导入模块的差别
- 2433: [Noi2011]智能车比赛 - BZOJ
- android146 360 病毒查杀
- Source Insight 技巧总结
- Bootstrap之表格checkbox复选框全选 [转]
- struts2文件上传,文件类型 allowedTypes
- jquery submit()不能提交表单的解决方法
- CentOS的MySQL报错:Can&#39;t connect to MySQL server
- iOS AVCaptureDevice的一些动西
- nmon的安装与使用
- BZOJ 3028 食物 生成函数
- linux相关命令及配置(四)
- Java通过JDBC连接数据库的三种方式!!!并对数据库实现增删改查
- Fiddler 过滤设置
- python基础之Day20part2
- AndroidO bluedroid alarm 机制分析
- python排列组合之itertools模块
- 2016年3月12日Android学习笔记