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

2023-10-27

题目描述

  • 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转
  • 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。
  • 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
  • 给出的所有元素都大于0,若数组大小为0,请返回0。

理解

  • 非减排序想说明什么
    这说明说明旋转前的数组是按照非减的顺序排列的
  • 引入数组的旋转是为了什么
    这说明旋转后的数组分成了两个非减排序的数组,记为array1和array2,array1中的任意元素是大于等于array2中所有数的,所以array2中的第一个数就是我们要找的旋转数组中最小的数。
  • 旋转数组的最小数字

解题思路

思路1
无非是要找出给定数组中的最小元素,不考虑什么数组旋转,直接简单粗暴解决

class Solution:
    def minNumberInRotateArray(self, rotateArray):
        min = rotateArray[0]
        if len(rotateArray) > 0:
            for i in range(1,len(rotateArray)):
                if rotateArray[i] < min:
                    min = rotateArray[i]
            return min
        else:
            return 0

或者

class Solution:
    def minNumberInRotateArray(self, rotateArray):
        if len(rotateArray) == 0:
            return 0
        else:
            return min(rotateArray)

思路2
利用二分查找法

  • 设置中间点,标记旋转数组首元素和尾元素,中间点将数组分成两半。
  • 如果中间点大于等于首元素,说明最小数字在数组后一半,如果中间点小于等于尾元素,说明最小数字在数组前一半。依次改变首尾元素的位置,当尾元素和首元素挨着的时候,这时候尾元素就是所找的最小值。有一点特殊的是,当首元素等于尾元素等于中间值时,只能对数组进行顺序查找。
class Solution:
    def minNumberInRotateArray(self, rotateArray):
        array_len = len(rotateArray)
        left = 0
        right = array_len - 1
        if array_len==0:
            return 0
        else:           
            while (right - left)> 1:
                mid = (left + right)//2         
                if rotateArray[mid] == rotateArray[left] and rotateArray[mid] == rotateArray[right]:
                    min = rotateArray[left]
                    for i in range(left,right):
                        if rotateArray[i] < min:
                            min = rotateArray[i]
                    return min 
                elif rotateArray[mid]>=rotateArray[left]:
                    left = mid
                elif rotateArray[mid]<=rotateArray[right]:
                    right = mid
        return rotateArray[right]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

剑指offer_第6题_旋转数组的最小数字 的相关文章

  • 剑指Offer 04. 二维数组中的查找

    原题链接 思路 题目中说 每一行都是 从左向右递增的 在一个递增的序列中 查找某个数是否是存在的 二分即可 注意对边界进行判断 时间复杂度 O nlogn 代码 class Solution public boolean check int
  • LeetCode第3题解析

    给定一个字符串 请你找出其中不含有重复字符的 最长子串 的长度 示例 1 输入 abcabcbb 输出 3 解释 因为无重复字符的最长子串是 abc 所以其长度为 3 示例 2 输入 bbbbb 输出 1 解释 因为无重复字符的最长子串是
  • python解决数组奇数和偶数位置排序问题

    题目描述 输入一个整数数组 实现一个函数来调整该数组中数字的顺序 使得所有的奇数位于数组的前半部分 所有的偶数位于数组的后半部分 并保证奇数和奇数 偶数和偶数之间的相对位置不变 题目解析 这个题目很简单 只需要判断数组中的元素是奇数还是偶数
  • 最大连续子数组和

    最大连续子数组和 动态规划 迭代求出以i结尾的最大连续和 i 1结尾的最大连续和时和前一位的状态有关 列出递推式即可求解 class Solution public int FindGreatestSumOfSubArray vector
  • LeetCode-重建二叉树

    先利用前序遍历找根节点 前序遍历的第一个数 就是根节点的值 在中序遍历中找到根节点的位置 k 则 k 左边是左子树的中序遍历 右边是右子树的中序遍历 假设左子树的中序遍历的长度是 l 则在前序遍历中 根节点后面的 l 个数 是左子树的前序遍
  • 字符串04--左旋转字符串

    字符串04 左旋转字符串 jz43 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 汇编语言中有一种移位指令叫做循环左移 ROL 现在有个简单的任务 就是用字符串模拟这个指令的运算结果 对于一个给定的字符序列S 请你把其循环左
  • 剑指 Offer 66. 构建乘积数组(java+python)

    给定一个数组 A 0 1 n 1 请构建一个数组 B 0 1 n 1 其中 B i 的值是数组 A 中除了下标 i 以外的元素的积 即 B i A 0 A 1 A i 1 A i 1 A n 1 不能使用除法 示例 输入 1 2 3 4 5
  • 剑指Offer(牛客网)-替换空格

    题目来源 https www nowcoder com practice 4060ac7e3e404ad1a894ef3e17650423 tpId 13 tqId 11155 tPage 1 rp 1 ru 2Fta 2Fcoding i
  • 剑指offer:中等部分

    剑指offer 中等部分 001 求1 2 n 求 1 2 n 要求不能使用乘除法 for while if else switch case等关键字及条件判断语句 A B C 示例 1 输入 n 3 输出 6 示例 2 输入 n 9 输出
  • JZ15 二进制中1的个数

    输入一个整数 n 输出该数32位二进制表示中1的个数 其中负数用补码表示 数据范围 2 31 lt n lt 2 31 1 231 lt n lt 231 1 即范围为 2147483648 lt n lt 2147483647 21474
  • 剑指offer--顺时针打印矩阵

    题目描述 输入一个矩阵 按照从外向里以顺时针的顺序依次打印出每一个数字 例如 如果输入如下矩阵 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1 2 3 4 8 12 16 15 14 13
  • 剑指 Offer 28. 对称的二叉树 -- 递归

    0 题目描述 leetcode原题链接 剑指 Offer 28 对称的二叉树 1 递归解法 对称二叉树定义 对于树中 任意两个对称节点 L L L 和 R R R 一定有
  • 数组17--机器人的运动范围

    数组17 机器人的运动范围 jz66 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 地上有一个m行和n列的方格 一个机器人从坐标0 0的格子开始移动 每一次只能向左 右 上 下四个方向移动一格 但是不能进入行坐标和列坐标的数
  • 剑指 Offer 27. 二叉树的镜像 -- 递归

    0 题目描述 leetcode原题链接 剑指 Offer 27 二叉树的镜像 1 递归算法 根据二叉树镜像的定义 考虑递归遍历 d f s mathrm dfs dfs 二叉树 交换每个节点的左 右子节点 即可生成 二叉树的镜像 递归解析
  • Acwing-27. 数值的整数次方

    由于本题的指数是int范围 可能很大 所以需要用快速幂 Acwing 875 快速幂 中有详细介绍快速幂 点击链接即可传送 求解 https blog csdn net weixin 43844521 article details 127
  • 树05--二叉搜索树的后序遍历序列

    树05 二叉搜索树的后序遍历序列 jz23 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 输入一个整数数组 判断该数组是不是某二叉搜索树的后序遍历的结果 如果是则返回true 否则返回false 假设输入的数组的任意两个数字
  • 第一个只出现一次的字符(Java)

    题目 在字符串中找出第一个只出现一次的字符 如输入 abaccdeff 则输出 b 第一思路 借助于数组来做 开辟一个长度为26的数组 用来存放字符串中每个字符出现的次数 这样第一次扫描去统计这个字符串中字符出现的次数 第二次去统计第一个出
  • 剑指 Offer 18. 删除链表的节点 -- 双指针

    0 题目描述 leetcode原题链接 剑指 Offer 18 删除链表的节点 1 双指针解法 删除值为 val 的节点分需为两步 定位节点 修改引用 定位节点 遍历链表 直到 head val val 时跳出 即可定位目标节点 修改引用
  • 把字符串转换成整数(字符串)

    题目描述 将一个字符串转换成一个整数 要求不能使用字符串转换整数的库函数 数值为0或者字符串不是一个合法的数值则返回0 输入描述 输入一个字符串 包括数字字母符号 可以为空 输出描述 如果是合法的数值表达则返回该数字 否则返回0 思路一 p
  • 剑指 Offer(第2版)面试题 40:最小的 k 个数

    剑指 Offer 第2版 面试题 40 最小的 k 个数 剑指 Offer 第2版 面试题 40 最小的 k 个数 解法1 排序 解法2 快速选择 解法3 优先队列 剑指 Offer 第2版 面试题 40 最小的 k 个数 题目来源 53

随机推荐

  • C++ 学习(11)类和对象、封装、访问权限、成员属性私有性、构造函数与析构函数

    面向对象的特点 封装 继承 多态 万事万物皆为对象 对象上有其属性和行为 方法 1 封装 将属性与行为作为一个整体 表现生活中的事物 将属性和行为加以权限控制 public private等 C 封装 语法 class 类名 访问权限 属性
  • MBIST --- PATR1.Memorybist测试原理

    mem bist作为现在design设计中不可或缺的DFT设计内容 越发重要 本章节主要介绍mem bist组成部分 测试的原理以及注意事项 1 mem bist implementation 1 1 如下图所示为最basic的mbist
  • LeetCode 1476. 子矩形查询

    请你实现一个类 SubrectangleQueries 它的构造函数的参数是一个 rows x cols 的矩形 这里用整数矩阵表示 并支持以下两种操作 updateSubrectangle int row1 int col1 int ro
  • 利用randlanet训练示例semantic3D数据并将预测结果可视化

    1 深度学习环境配置 安装ubuntu 18 安装显卡驱动 cuda cuDNN 安装anaconda 安装tensorflow gpu包 下载randlanet 2 训练semantic3D数据并预测 2 1下载数据 进入RandLA N
  • ajax原理总结,关于Ajax技术原理的3点总结

    ajax Asynchronous Javascript and XML 异步Javascript 和XML 是一种创建交互式网页应用的网页开发技术 1 0 优势 1 1 通过异步模式 提升了用户体验 1 2 优化了浏览器与服务器之间的传输
  • 效率提高80%,Go开发必备的库与工具!

    不知不觉写 Go 已经快一年了 上线了大大小小好几个项目 心态也经历了几轮变化 因为我个人大概前五年时间写的是 Java 中途写过一年多的 Python 所以刚接触到 Go 时的感觉如下图 既没有 Java 的生态 也没有 Python 这
  • 漏写volatile造成的惨案

    之前笔者在做一个基于 Air724UG openmcu CSDK 项目 里面写了如下的代码片段 uint32 t flag 0 void timer handle void para 1秒定时器中断 flag 1 void thread r
  • kettle 入门配置

    1 kettle 介绍 kettle 水壶 是一个 免费开源的 Extract Transform Load ETL 工具 被 Pentaho 集团收购 并更名为 Pentaho Data Integration PDI 当中又包含了四大厨
  • DIY制作并安装JDK8绿色版

    前言 官网提供的JDK8只有安装包 没有绿色免安版 而我们开发时需要根据需求使用不同的JDK版本 使用安装包安装过程会写入注册表 不方便便携式使用 还会附带安装Java 8 Update 会自动更新 而绿色版不会写入注册表 不会自动更新 不
  • HCIA 网络基础

    目录 一 网络概念 二 最初的网络层次 三 网络增大 四 传输介质 1 同轴电缆 2 双绞线 RJ 45 3 光纤 4 无线传输 五 网络增大过程中的升级要求 六 拓扑结构 1 总线型 2 星型 3 环型 4 网状型 七 网桥 gt 交换机
  • 性能测试jmeter连接数据库jdbc(sql server举例)

    一 下载第三方工具包驱动数据库 1 因为JMeter本身没有提供链接数据库的功能 所以我们需要借助第三方的工具包来实现 有这个jar包之后 jmeter可以发起jdbc请求 没有这个jar包 也有jdbc取样器 但不能发起请求 2 进入ma
  • html的marquee标签,marquee 标签参数详细说明

    marquee 元素 可以 用来插入一段滚动的文字 实现类似走马灯的动效 但这个标签已经过时 MDN文档已经不建议使用 此前因之前项目紧急用过 做个标签参数小结 1 marquee的属性 behavior 设置文本如何滚动 属性值有3种 s
  • React生命周期

    React的生命周期 1 挂载卸载过程 constructor componentWillMount componentDidMount componentWillUnmount 2 更新过程 componentWillReceivePro
  • 利用云服务器搭建解锁网易云变灰歌曲的代理

    前言 最近又在GitHub上发现一个有趣的项目 UnblockNeteaseMusic 还是那句话建议在使用前仔细阅读一下项目的readme 于是打算做一个搭建的教程 本文用搭建了宝塔面板的CentOS的服务器做演示 所以文中包含了宝塔面板
  • C语言常量、变量、标识符

    一 变量概述 变量是一个保存数据的地方 当我们需要在程序里保存数据时 就需要一个变量来保存它 变量定义的一般形式就是 lt 类型名称 gt lt 变量名称 gt 例如 int price int amount int price amoun
  • package.json文件中,^和~的区别

    package json文件里面 显示的是项目所依赖的插件和库的名称和版本 和 就是说明版本号的 它将当前库的版本更新到第一个数字 major version 中的最新版本 比如 12 2 2 库会匹配更新到12 X X的最新版本 但是不会
  • 每日一题 AcWing 99.激光炸弹

    题目 地图上有 N 个目标 用整数 Xi Yi 表示目标在地图上的位置 每个目标都有一个价值 Wi 注意 不同目标可能在同一位置 现在有一种新型的激光炸弹 可以摧毁一个包含 R R 个位置的正方形内的所有目标 激光炸弹的投放是通过卫星定位的
  • 用matplotlib画圆和圆环

    usr bin env python coding UTF 8 import numpy as np from pylab import 创建一个 8 8 点 point 的图 并设置分辨率为 80 figure figsize 8 8 d
  • vsan加入不同型号服务器,VMware VSAN的特点与要求,与优缺点

    VSAN的特点与要求 与优缺点 VMware VSAN主要有5个特点 1 运行在标准x86服务器上 2 分布式集群 把VM数据文件打散放在多个主机上 每个服务器的本地存储网络池化3 使用SSD作为读写缓存加速层 混合型策略 由SSD提供性能
  • 剑指offer_第6题_旋转数组的最小数字

    题目描述 把一个数组最开始的若干个元素搬到数组的末尾 我们称之为数组的旋转 输入一个非减排序的数组的一个旋转 输出旋转数组的最小元素 例如数组 3 4 5 1 2 为 1 2 3 4 5 的一个旋转 该数组的最小值为1 给出的所有元素都大于