返回信息流在九度oj上刷了一道面试题(旋转数组的最小数字,题目连接如下http://ac.jobdu.com/problem.php?pid=1386),我是用二分查找做的,最后也AC了,但觉得耗时有点长(680ms),所以就看了下用C语言写的耗时最短的C代码(280ms),结果看了半天硬是没看明白280ms代码的解题思路是啥,求各路大神指点指点。
题目描述如下:
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
耗时280ms的C代码如下:
#include<stdio.h>
#include<ctype.h>
unsigned int s[8];
int main()
{
register int a,b,n;
int m;
register char c;
char s[500000];
while(scanf("%d",&m)!=EOF)
{
n=m;
while(!isdigit(c=getchar()));
for(a=c-'0'; isdigit(c=getchar());)
{
a=(a<<4)+(c-'0');
}
while(--n){
while(!isdigit(c=getchar()));
for(b=c-'0'; isdigit(c=getchar());)
{
b=(b<<4)+(c-'0');
}
if(a>b)
{
a=b;
gets(s);
break;
}
}
for(n=0;n<8;n++)
{
s[n] = a&0xf;
a=a>>4;
}
n=8;
while(n&&(s[--n]<1));
printf("%d",s[n]);
while(n)
{
printf("%d",s[--n]);
}
printf("\n",a);
}
return 0;
}
看明白的大神们说说代码的解题思路是啥啊。。。。
这是一条镜像帖。来源:北邮人论坛 / cpp / #83861同步于 2014/11/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
看到别人家孩子写的C程序,感觉自己不会C语言了
ahfytao
2014/11/3镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。