题目来源:牛客网

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

【算法编程】旋转数组查找最小数字相关推荐

  1. leetcode算法题--旋转数组的最小数字

    原题链接:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/ 二分法 int minArray(ve ...

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

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

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

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

  4. 《剑指offer》--二维数组中的查找、从头到尾打印链表、重建二叉树、旋转数组的最小数字

    一.二维数值中的查找: 1.题目: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数 ...

  5. 剑指offer java -查找旋转数组的最小数字

    /** * Created by wqc on 2017/7/18. * 查找旋转数组的最小数字 * 把一个数组最开始的若干个元素搬到数组的末尾,称为数组的旋转 * 输入一个递增排序的数组的一个旋转, ...

  6. 旋转数组的最小数字查找

    旋转数组的最小数字查找 怀疑 题目 分析 代码 结果 总结 怀疑 什么是数组的旋转? 输入的旋转数组有什么特性? 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称为数组的旋转.输入一个递增排序 ...

  7. 【LeetCode】剑指 Offer 11. 旋转数组的最小数字

    [LeetCode]剑指 Offer 11. 旋转数组的最小数字 文章目录 [LeetCode]剑指 Offer 11. 旋转数组的最小数字 一.遍历 二.二分法 总结 一.遍历 算法步骤: 遍历数组 ...

  8. 剑指offer——11.旋转数组的最小数字

    题目: 题1:实现快速排序 题2:年龄排序问题. 题3:旋转数组的最小数字 知识点: 快速排序算法,参考:https://blog.csdn.net/shujuelin/article/details ...

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

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

最新文章

  1. [原]unity3d之http多线程异步资源下载
  2. WordPress工作原理之程序文件执行顺序
  3. JAVA面向对象的总结(函数重载与数组)
  4. Puppet基础篇9-Puppetmaster多环境配置
  5. 直播预告丨深耕用户价值,实战保险业数字化升级
  6. java面向对象的特征 —(13)
  7. 【6.13-6.27推荐享大礼】华为云·云享专家推荐有礼活动火热进行中……
  8. 一台机器上安装两个tomcat
  9. java int ==_Java 位运算符和 int 类型的实现
  10. java 删除指定文件夹和下面所有文件_JAVA语言基础
  11. 通过数据流处理-微信小程序生成临时二维码
  12. 关于 HenCoder
  13. 基于FFmpeg的H265编码器
  14. 带有vlan tag的报文与网卡的交互关系
  15. C++11 packaged_task
  16. Dear小弟×××,给你们的一封信「社区运营入门系列 序」
  17. 苹果自带相册打马赛克_剪映app怎么给视频局部打马赛克
  18. 【观察】加速IPFS基础设施落地,西部数据的三重独特优势
  19. 什么是微信小程序【重点学习系列---干货十足--一文详解】
  20. WinMain:应用程序入口点【WinMain: The Application Entry Point】

热门文章

  1. disruptor小结--生产者代码
  2. 浅谈信息安全及解决方案
  3. 禁止ultraiso开机自动加载镜像
  4. 刚刚,李彦宏首谈Uber致命车祸,还给了一个很“特别”的评价
  5. 腾讯还在提高围棋AI绝艺的棋力,柯洁说已经超过当年AlphaGo
  6. DNGuard HVM 专业版 v2.7 正式发布。
  7. 站在悬崖边上,金立手机的生死较量
  8. AngularJS+Ionic开发-2.项目结构介绍
  9. 关于router-link包含dom元素会出现Warnings while compiling.警告的问题!
  10. Linux下bash:command not found提示