转载请注明出处: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
****************************************************************/

【剑指offer】旋转数组的最小值的更多相关文章

  1. 剑指Offer 旋转数组的最小数字

    题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转 ...

  2. 剑指offer 旋转数组

    class Solution { public: int minNumberInRotateArray(vector<int> rotateArray) { //常规的遍历方法时间是O(N ...

  3. 剑指Offer——旋转数组的最小数字

    题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一 ...

  4. 用js刷剑指offer(旋转数组的最小数字)

    题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个 ...

  5. 剑指Offer06 旋转数组的最小值

    /************************************************************************* > File Name: 06_MinNum ...

  6. 剑指 Offer 51. 数组中的逆序对 + 归并排序 + 树状数组

    剑指 Offer 51. 数组中的逆序对 Offer_51 题目描述 方法一:暴力法(双层循环,超时) package com.walegarrett.offer; /** * @Author Wal ...

  7. 剑指Offer:数组中出现次数超过一半的数字【39】

    剑指Offer:数组中出现次数超过一半的数字[39] 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如,输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于这 ...

  8. 《剑指offer》数组中只出现一次的数字

    本题来自<剑指offer> 数组中只出现一次的数字 题目: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 思路: 思路一:在<剑指of ...

  9. 剑指 Offer 39. 数组中出现次数超过一半的数字 + 摩尔投票法

    剑指 Offer 39. 数组中出现次数超过一半的数字 Offer_39 题目描述 方法一:使用map存储数字出现的次数 public class Offer_39 { public int majo ...

  10. 剑指 Offer 03. 数组中重复的数字

    剑指 Offer 03. 数组中重复的数字 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知 ...

随机推荐

  1. php语言基础学习笔记

    花了一个小时复习了一下很多年没有碰了的php,mark一下,高二时学的. 1. 代码嵌在<?php  ?>内 2.输出函数echo,相当于js中的document.write 3.可以在打 ...

  2. Linux 二层协议架构组织

    本文主要讲解了Linux 二层协议架构组织,使用的内核的版本是2.6.32.27 为了方便理解,本文采用整体流程图加伪代码的方式从内核高层面上梳理了Linux 二层协议架构组织,希望可以对大家有所帮助 ...

  3. [ACM] 九度OJ 1553 时钟

    时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:1733 解决:656 题目描写叙述: 如图,给定随意时刻,求时针和分针的夹角(劣弧所相应的角). 输入: 输入包括多组測试数据.每组測试数 ...

  4. webdynpro 调用应用程序做跳转

    1.是调用指的是调用生成应用程序,非webdynpro组件程序, 如下: 1)调用页面,并传值 METHOD get_zgmtpage . DATA:lw_application_name TYPE ...

  5. linux命令行模式下实现代理上网(转)

    有些公司的局域网环境,例如我们公司的只允许使用代理上网,图形界面的很好解决就设置一下浏览器的代理就好了,但是linux纯命令行的界面就....下面简单几步就可以实现了! 一.命令行界面的一般代理设置方 ...

  6. 谈谈Ext JS的组件——布局的用法续二

    绝对布局(Ext.layout.container.Absolute) 绝对布局让我回忆到了使用Foxpro开发的时候,哪时候的界面布局就是这样.通过设置控件的左上角坐标(x.y)和宽度来进行的,由于 ...

  7. 在VC资源文件中加入声音资源

    本文介绍如何在VC资源文件中加入自己的声音资源,使自己的应用程序可以播放声音. 1.首先用文本编辑器(如记事本)打开资源文件(.rc文件) 在最后加入自己的声音资源,如下IDW WAVE " ...

  8. navicat for mysql 显示中文乱码解决办法

      最近遇到一个问题,用navicat for mysql 打开数据库时全都显示的是乱码(在用程序代码插入数据之前确保字符不是乱码),遇到问题就的寻求解决之道,百度了好长时间也没解决,网上那些解决办法 ...

  9. 如何配置Git支持大小写敏感和修改文件名中大小写字母呢?(转)

    1. 在新建代码文件时,不注意把文件名应该小小写搞错了2. 文件已经push到远程了3. 在windows下面将文件名字改为全小写 改好后,在Git中没有任何反应,使用git status时,如果遇到 ...

  10. Java核心技术-高级特性(2)- SoftReference, WeakReference and PhantomReference

    Java.lang.ref 是 Java 类库中比较特殊的一个包,它提供了与 Java 垃圾回收器密切相关的引用类.这些引用类对象可以指向其它对象,但它们不同于一般的引用,因为它们的存在并不防碍 Ja ...