题目描述:

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{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

一个修改版的二分查找
 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4
 5 int a[1000000];
 6
 7 int findPos(int a[], int left, int right)
 8 {
 9     if (left > right)
10         return -1;
11
12     int mid = left + (right - left) / 2;
13
14     if (a[left] < a[mid])
15     {
16         int pos = findPos(a, mid + 1, right);
17         if (pos == -1)
18             return left;
19         else
20             return a[pos] < a[left] ? pos : left;
21     }
22     else if (a[left] > a[mid])
23     {
24         int pos = findPos(a, left, mid - 1);
25         if (pos == -1)
26             return mid;
27         else
28             return a[pos] < a[mid] ? pos : mid;
29     }
30         else
31         {
32             int pos1 = findPos(a, mid + 1, right);
33             int pos2 = findPos(a, left , mid - 1);
34
35             if (pos1 == -1 && pos2 == -1)
36                 return mid;
37             else if (pos1 == -1)
38                 return a[mid] < a[pos2] ? mid : pos2;
39             else if (pos2 == -1)
40                 return a[mid] < a[pos1] ? mid : pos1;
41             else
42             {
43                 if (a[pos1] < a[pos2])
44                     return a[mid] < a[pos1] ? mid : pos1;
45                 else
46                     return a[mid] < a[pos2] ? mid : pos2;
47             }
48         }
49 }
50
51 int main()
52 {
53     int n;
54     while(scanf("%d", &n) != EOF)
55     {
56         for(int i = 0; i < n; i++)
57             scanf("%d", &a[i]);
58
59         int pos = findPos(a, 0, n - 1);
60
61         cout << a[pos] << endl;
62     }
63 }

[九度][何海涛] 旋转数组的最小数字相关推荐

  1. 剑指offer——面试题8:旋转数组的最小数字

    剑指offer--面试题8:旋转数组的最小数字 Solution1: 自己想的复杂度为O(n)O(n)O(n)的算法,若用二分查找则: 1.代码复杂:2.最坏情况下的二分查找的时间复杂度亦为O(n)O ...

  2. 剑指offer:面试题11. 旋转数组的最小数字

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

  3. 剑指offer_第6题_旋转数组的最小数字

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

  4. 《LeetCode力扣练习》剑指 Offer 11. 旋转数组的最小数字 Java

    <LeetCode力扣练习>剑指 Offer 11. 旋转数组的最小数字 Java 一.资源 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 给你一个可能存在 ...

  5. 剑指 Offer 11. 旋转数组的最小数字 简单

    剑指 Offer 11. 旋转数组的最小数字 题目 解题思路 方法(一)直接遍历法 方法(二)二分查找法 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组 ...

  6. LeetCode-剑指 Offer 11. 旋转数组的最小数字

    剑指 Offer 11. 旋转数组的最小数字 思路一:先排序,返回第一个数组值 class Solution {public:int minArray(vector<int>& n ...

  7. 剑指offer 11. 旋转数组的最小数字(很详细!)

    剑指offer 11. 旋转数组的最小数字 题目 解题思路 代码 题目 解题思路 一开始,我们就能直接想到,数组找最小值,那么不轻轻松松直接遍历一遍,用一个变量记录最小值,然后直接返回不就完事了? 但 ...

  8. 剑指Offer #06 旋转数组的最小数字(二分查找)| 图文详解

    题目来源:牛客网-剑指Offer专题 题目地址:旋转数组的最小数字 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小 ...

  9. 算法练习day20——190411(重建二叉树、斐波那契数列、跳台阶、矩形覆盖、变态跳台阶、旋转数组的最小数字、矩阵中的路径)

    1.重建二叉树 根据二叉树的前序遍历和中序遍历的结果,重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. preorder = [3,9,20,15,7].inorder = [9 ...

最新文章

  1. R语言层次聚类(hierarchical clustering):使用scale函数进行特征缩放、hclust包层次聚类(创建距离矩阵、聚类、绘制树状图dendrogram,在树状图上绘制红色矩形框)
  2. 性能优化:实现动画效果优先考虑css的transition
  3. AC自动机-HDU2222-模板题
  4. POJ 1273 Drainage Ditches 最大流
  5. IDEA运行VUE npm install报错:chromedriver@2.27.2 install: node install.js
  6. JDK 14 性能提升,但 JDK 8 仍是最强王者!
  7. PADS2007库转换为PADS 9.0以上库文件
  8. IE-ALB网络实验室:cisp-pte CCNA题库 GLBP网关负载均衡协议原理
  9. 陆游书法真迹,堪称书法大家!
  10. ioncube加密与解密 php代码
  11. jenkins===当postman出现错误403 No valid crumb was included in the request的解决办法
  12. 从Python爬虫到Spark预处理数据的真实需求[三]
  13. 在 Arch Linux 上使用人脸识别(howdy)来登陆和认证
  14. 酷爱到碗里来+文蛤蒸蛋
  15. 10章 RxJava源码分析
  16. 临时表空间不足ORA-01652: unable to extend temp segment by 64 in tablespace
  17. java解决小问题:我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。 请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?(提示:使用while循环)
  18. autojs脚本备忘
  19. 【Nav2中文网】六、插件教程(二)编写新的规划器插件
  20. 世界上最大的监狱是人的大脑

热门文章

  1. Dom4J读写xml
  2. C++学习笔记——虚函数
  3. #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  4. 【redis源码】(九)Redis
  5. 如何从io.Reader 中读数据
  6. leetcode547. 省份数量
  7. flink CompactingHashTable源码解析
  8. Mybatis动态sql语句的生成
  9. 部署高可用 Etcd 集群
  10. Java解决循环注入问题