[九度][何海涛] 旋转数组的最小数字
- 题目描述:
-
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{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 }
[九度][何海涛] 旋转数组的最小数字相关推荐
- 剑指offer——面试题8:旋转数组的最小数字
剑指offer--面试题8:旋转数组的最小数字 Solution1: 自己想的复杂度为O(n)O(n)O(n)的算法,若用二分查找则: 1.代码复杂:2.最坏情况下的二分查找的时间复杂度亦为O(n)O ...
- 剑指offer:面试题11. 旋转数组的最小数字
题目:旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5,1,2] 为 [1,2, ...
- 剑指offer_第6题_旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋 ...
- 《LeetCode力扣练习》剑指 Offer 11. 旋转数组的最小数字 Java
<LeetCode力扣练习>剑指 Offer 11. 旋转数组的最小数字 Java 一.资源 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 给你一个可能存在 ...
- 剑指 Offer 11. 旋转数组的最小数字 简单
剑指 Offer 11. 旋转数组的最小数字 题目 解题思路 方法(一)直接遍历法 方法(二)二分查找法 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组 ...
- LeetCode-剑指 Offer 11. 旋转数组的最小数字
剑指 Offer 11. 旋转数组的最小数字 思路一:先排序,返回第一个数组值 class Solution {public:int minArray(vector<int>& n ...
- 剑指offer 11. 旋转数组的最小数字(很详细!)
剑指offer 11. 旋转数组的最小数字 题目 解题思路 代码 题目 解题思路 一开始,我们就能直接想到,数组找最小值,那么不轻轻松松直接遍历一遍,用一个变量记录最小值,然后直接返回不就完事了? 但 ...
- 剑指Offer #06 旋转数组的最小数字(二分查找)| 图文详解
题目来源:牛客网-剑指Offer专题 题目地址:旋转数组的最小数字 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小 ...
- 算法练习day20——190411(重建二叉树、斐波那契数列、跳台阶、矩形覆盖、变态跳台阶、旋转数组的最小数字、矩阵中的路径)
1.重建二叉树 根据二叉树的前序遍历和中序遍历的结果,重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. preorder = [3,9,20,15,7].inorder = [9 ...
最新文章
- R语言层次聚类(hierarchical clustering):使用scale函数进行特征缩放、hclust包层次聚类(创建距离矩阵、聚类、绘制树状图dendrogram,在树状图上绘制红色矩形框)
- 性能优化:实现动画效果优先考虑css的transition
- AC自动机-HDU2222-模板题
- POJ 1273 Drainage Ditches 最大流
- IDEA运行VUE npm install报错:chromedriver@2.27.2 install: node install.js
- JDK 14 性能提升,但 JDK 8 仍是最强王者!
- PADS2007库转换为PADS 9.0以上库文件
- IE-ALB网络实验室:cisp-pte CCNA题库 GLBP网关负载均衡协议原理
- 陆游书法真迹,堪称书法大家!
- ioncube加密与解密 php代码
- jenkins===当postman出现错误403 No valid crumb was included in the request的解决办法
- 从Python爬虫到Spark预处理数据的真实需求[三]
- 在 Arch Linux 上使用人脸识别(howdy)来登陆和认证
- 酷爱到碗里来+文蛤蒸蛋
- 10章 RxJava源码分析
- 临时表空间不足ORA-01652: unable to extend temp segment by 64 in tablespace
- java解决小问题:我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。 	请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?(提示:使用while循环)
- autojs脚本备忘
- 【Nav2中文网】六、插件教程(二)编写新的规划器插件
- 世界上最大的监狱是人的大脑