转载请注明出处:http://blog.csdn.net/ns_code/article/details/25335043


如今对算法真的是由衷地热爱啊,总是忍不住想要A题(本科都没这意识,哎,把时间都浪费在了考试拿奖学金和所谓的学生工作上了),并且数学一直以来都是自己的强项,希望在这方面以后能应用好。尽管在ACM方面还仅仅是个小学生。以后即使工作了,也要把ACM坚持下去。无关乎工作,仅仅关乎兴趣。

依旧是剑指offer上的题目,第8题,在九度OJ上測试通过。

时间限制:1 秒

内存限制:32 兆

题目描写叙述:

把一个数组最開始的若干个元素搬到数组的末尾。我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。

比如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。

输入:

输入可能包括多个測试例子。对于每一个測试案例,

输入的第一行为一个整数n(1<= n<=1000000):代表旋转数组的元素个数。

输入的第二行包括n个整数。当中每一个整数a的范围是(1<=a<=10000000)。

输出:

相应每一个測试案例,

输出旋转数组中最小的元素。

例子输入:
53 4 5 1 2
例子输出:
1

採用二分查找的策略,重点要考虑一些边界情况:旋转了0元素。即输入的是一个升序排列的数组、仅仅包括一个数字的数组、有非常多反复数字的数组等。

AC代码:

#include<stdio.h>
#include<stdlib.h> int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
int *A = (int *)malloc(n*sizeof(int));
if(A == NULL)
exit(EXIT_FAILURE);
int i;
for(i=0;i<n;i++)
scanf("%d",A+i); int p1 = 0;
int p2 = n-1;
int mid = p1;
while(A[p1] >= A[p2])
{
if(p2-p1 == 1)
{
mid = p2;
break;
}
mid = (p1+p2)/2;
//特殊情况,仅仅能顺序查找
if(A[p1]==A[mid] && A[p2]==A[mid])
{
mid = p1;
int i;
for(i=p1+1;i<=p2;i++)
{
if(A[mid] > A[i])
mid = i;
}
break;
}
if(A[mid]>=A[p1])
p1 = mid;
else if(A[mid]<=A[p2])
p2 = mid;
}
printf("%d\n",A[mid]);
free(A);
A = 0;
}
return 0;
}

/**************************************************************
    Problem: 1386
    User: mmc_maodun
    Language: C
    Result: Accepted
    Time:700 ms
    Memory:4820 kb
****************************************************************/

最新文章

  1. 重新安装配置ubuntu的引导菜单
  2. 每天一个linux命令(43):lsof命令
  3. redis数据库使用测试
  4. 洛谷P2264 情书
  5. openstack instance snapshort
  6. Cable master
  7. Quartz Cron表达式生成器
  8. C++中const几中用法
  9. 第2次作业:STEAM案例分析
  10. 啰嗦的 java,简洁的 lombok —— lombok 的使用及简单实现单例模式注解
  11. git操作笔记《二》:github更新缓慢问题的解决办法
  12. centos7之vm11添加网卡
  13. GO语言常量和变量
  14. cf757F Team Rocket Rises Again (dijkstra+支配树)
  15. HeadFirst Ruby 第十四章总结 Web apps: Serving HTML
  16. dspmq dspmqver command not found(dspmq命令找不到,dspmqver主安装目录设置不正确
  17. js 替换字符串中所有匹配的字符
  18. currentBackgroundImage:获取按钮背景图片
  19. Keepalived+HAproxy实现高可用负载均衡
  20. 51Nod:独木舟问题(贪心)

热门文章

  1. 首款符合PICO-ITX规格的A20开源硬件开发平台
  2. C++学习笔记14,private/protected/public继承,私有继承,保护继承,公有继承(五)(总结)
  3. Android开发:在onTouchEvent中处理任意时间的长按事件
  4. HDU4549 M斐波那契数
  5. BZOJ 3110([Zjoi2013]K大数查询-区间第k大[段修改,在线]-树状数组套函数式线段树)
  6. cpp check 分析
  7. SilkTest Q&amp;A 11
  8. 深度RAMOS,把操作系统全部安装在内存上
  9. 与众不同 windows phone (23) - Device(设备)之硬件状态, 系统状态, 网络状态
  10. 如何关闭android studio开发环境自动保存