【算法编程】旋转数组查找最小数字
题目来源:牛客网
题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
解题思路:二分法。
C++:35ms 608k
#include <vector> #include <iostream> #include <sstream> #include <string> using namespace std;class Solution { public:int minNumberInRotateArray(vector<int> rotateArray) {if (rotateArray.empty()){return 0;}// 二分法int arr_len = rotateArray.size();int left=0, right = arr_len-1;if (rotateArray[left]<rotateArray[right]){return rotateArray[left];}// without rotate// with rotatewhile (left!=right){int media = (left+right)/ 2;if (rotateArray[media]>rotateArray[left]){left = media;}else if (rotateArray[media]<rotateArray[left]){right = media;}else{left++;}}return rotateArray[left];} };int main() {Solution obj;string x_in;vector<int> vec_x;while(getline(cin,x_in)){istringstream line(x_in);while(line){int temp=0;line>>temp;vec_x.push_back(temp);}vec_x.pop_back();//cout<<vec_x.size()<<endl;cout << obj.minNumberInRotateArray(vec_x)<<endl;vec_x.clear();}cin.get();cin.get(); }
Python:994ms 5624k
# -*- coding:utf-8 -*- import sys class Solution:def minNumberInRotateArray(self, rotateArray):arr_len = len(rotateArray)if arr_len == 0:return 0;else:# 二分法left = 0right = arr_len-1media = (left+right)/2if rotateArray[left]<rotateArray[right]:return rotateArray[left]while not (media==left):if rotateArray[media]>rotateArray[left]:left = mediaelif rotateArray[media]<rotateArray[left]:right = mediaelse:left += 1media = (left+right)/2if rotateArray[left]>rotateArray[right]:return rotateArray[right]else:return rotateArray[left]if __name__ == '__main__':obj = Solution()while (1):x = raw_input().split()print obj.minNumberInRotateArray(x)
转载于:https://www.cnblogs.com/xiangfeidemengzhu/p/9140387.html
【算法编程】旋转数组查找最小数字相关推荐
- leetcode算法题--旋转数组的最小数字
原题链接:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/ 二分法 int minArray(ve ...
- 剑指Offer #06 旋转数组的最小数字(二分查找)| 图文详解
题目来源:牛客网-剑指Offer专题 题目地址:旋转数组的最小数字 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小 ...
- 算法练习day20——190411(重建二叉树、斐波那契数列、跳台阶、矩形覆盖、变态跳台阶、旋转数组的最小数字、矩阵中的路径)
1.重建二叉树 根据二叉树的前序遍历和中序遍历的结果,重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. preorder = [3,9,20,15,7].inorder = [9 ...
- 《剑指offer》--二维数组中的查找、从头到尾打印链表、重建二叉树、旋转数组的最小数字
一.二维数值中的查找: 1.题目: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数 ...
- 剑指offer java -查找旋转数组的最小数字
/** * Created by wqc on 2017/7/18. * 查找旋转数组的最小数字 * 把一个数组最开始的若干个元素搬到数组的末尾,称为数组的旋转 * 输入一个递增排序的数组的一个旋转, ...
- 旋转数组的最小数字查找
旋转数组的最小数字查找 怀疑 题目 分析 代码 结果 总结 怀疑 什么是数组的旋转? 输入的旋转数组有什么特性? 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称为数组的旋转.输入一个递增排序 ...
- 【LeetCode】剑指 Offer 11. 旋转数组的最小数字
[LeetCode]剑指 Offer 11. 旋转数组的最小数字 文章目录 [LeetCode]剑指 Offer 11. 旋转数组的最小数字 一.遍历 二.二分法 总结 一.遍历 算法步骤: 遍历数组 ...
- 剑指offer——11.旋转数组的最小数字
题目: 题1:实现快速排序 题2:年龄排序问题. 题3:旋转数组的最小数字 知识点: 快速排序算法,参考:https://blog.csdn.net/shujuelin/article/details ...
- 剑指offer——面试题8:旋转数组的最小数字
剑指offer--面试题8:旋转数组的最小数字 Solution1: 自己想的复杂度为O(n)O(n)O(n)的算法,若用二分查找则: 1.代码复杂:2.最坏情况下的二分查找的时间复杂度亦为O(n)O ...
最新文章
- [原]unity3d之http多线程异步资源下载
- WordPress工作原理之程序文件执行顺序
- JAVA面向对象的总结(函数重载与数组)
- Puppet基础篇9-Puppetmaster多环境配置
- 直播预告丨深耕用户价值,实战保险业数字化升级
- java面向对象的特征 —(13)
- 【6.13-6.27推荐享大礼】华为云·云享专家推荐有礼活动火热进行中……
- 一台机器上安装两个tomcat
- java int ==_Java 位运算符和 int 类型的实现
- java 删除指定文件夹和下面所有文件_JAVA语言基础
- 通过数据流处理-微信小程序生成临时二维码
- 关于 HenCoder
- 基于FFmpeg的H265编码器
- 带有vlan tag的报文与网卡的交互关系
- C++11 packaged_task
- Dear小弟×××,给你们的一封信「社区运营入门系列 序」
- 苹果自带相册打马赛克_剪映app怎么给视频局部打马赛克
- 【观察】加速IPFS基础设施落地,西部数据的三重独特优势
- 什么是微信小程序【重点学习系列---干货十足--一文详解】
- WinMain:应用程序入口点【WinMain: The Application Entry Point】
热门文章
- disruptor小结--生产者代码
- 浅谈信息安全及解决方案
- 禁止ultraiso开机自动加载镜像
- 刚刚,李彦宏首谈Uber致命车祸,还给了一个很“特别”的评价
- 腾讯还在提高围棋AI绝艺的棋力,柯洁说已经超过当年AlphaGo
- DNGuard HVM 专业版 v2.7 正式发布。
- 站在悬崖边上,金立手机的生死较量
- AngularJS+Ionic开发-2.项目结构介绍
- 关于router-link包含dom元素会出现Warnings while compiling.警告的问题!
- Linux下bash:command not found提示