剑指offer11.旋转数组的最小数字-7月22日(代码片段)

boyscrytoo boyscrytoo     2022-12-08     241

关键词:

题目

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

技术图片

 

 

我的思路

显然用二分查找,时间复杂度logn,最坏情况可能达到n。

要注意二分查找的边界条件判断,以及如果无法判断此次二分是取左或者去右时,可以尝试把上边界下标减1,再重新二分(安全地缩小边界)。

我的实现

class Solution 
public:
    int minArray(vector<int>& numbers) 
        int low = 0;
        int high = numbers.size()-1;
        int s;
        while(low!=high)
            s = low + (high - low)/2;
            if(numbers[high]>numbers[low]) return numbers[low];
            else if(numbers[high]<numbers[low]&&numbers[s]>=numbers[low]) low = s + 1;
            else if(numbers[high]<numbers[low]&&numbers[s]<=numbers[low]) high = s;
            else if(numbers[high]==numbers[low])high--;
        
        return numbers[low];
    
;
//二分查找
/*
先把两个指针low和high 指向数组首尾。若最小元素的指针(下标)是m,二分过程中的分界下标是s。
可能存在以下几种情况:
1.n[high]>n[low] return n[low]
2.n[high]<n[low] n[s]>=n[low] low = s+1
3.n[high]<n[low] n[s]<=n[high] high = s
4.n[high]==n[low] high--;//神来之笔,遇到无法判断二分到哪一边时,可以尝试直接把上边界象征性减小一点,重新判断
*/

 

拓展学习

为什么官方的二分法的题解很多都是写的low + (high - low) // 2 而不是 (high + low) // 2?

 (high + low) 在两者较大时会发生整型越界!

剑指offer11.旋转数组的最小数字(代码片段)

剑指Offer11.旋转数组的最小数字把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组[3,4,5,1,2]为[1,2,3,4,5]的一个旋转&#x... 查看详情

剑指offer打卡11.旋转数组的最小数字(代码片段)

剑指Offer(11)旋转数组的最小数字JavaScript剑指Offer题解🚀包含数组、对象、链表、堆栈、树等经典题型☕️每天一道,轻松不累💬详细的题目解析,收藏方便阅读在线阅读地址在线阅读地址题目描述把一... 查看详情

剑指offer打卡11.旋转数组的最小数字(代码片段)

剑指Offer(11)旋转数组的最小数字JavaScript剑指Offer题解🚀包含数组、对象、链表、堆栈、树等经典题型☕️每天一道,轻松不累💬详细的题目解析,收藏方便阅读在线阅读地址在线阅读地址题目描述把一... 查看详情

剑指offer_11_旋转数组的最小数字

题目描述  把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出一个旋转数组的最小元素。  例如:{3,4,5,1,2}为{1,2,3,4,5}对应的一个旋转数组,该数组的最小... 查看详情

剑指offer11.旋转数组的最小数字(代码片段)

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

剑指offer11旋转数组的最小数字(代码片段)

题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组3,4,5,1,2为1,2,3,4,5的一个旋转,该数组的最小值为1。 NOTE:给出的... 查看详情

剑指offer(c++版本)系列:剑指offer11旋转数组的最小数字(代码片段)

文章目录同步GitHub在此👉[https://github.com/TeFuirnever/GXL-Skill-Tree](https://github.com/TeFuirnever/GXL-Skill-Tree)1、题干2、二分查找法4、复杂度同步GitHub在此👉https://github.com/TeFuirnever/GXL-Skill-Tree剑指O 查看详情

剑指offer11.旋转数组的最小数字-二分查找(代码片段)

一、题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。给你一个可能存在重复元素值的数组numbers,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的... 查看详情

剑指offer-7.旋转数组的最小数字(代码片段)

 看起来不需要用二分法查找---------------------------------------------------------时间限制:3秒 空间限制:32768K 热度指数:509802本题知识点: 查找题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数... 查看详情

leetcode(剑指offer)-11.旋转数组的最小数字(代码片段)

题目链接:点击打开链接题目大意:略解题思路相关企业字节跳动亚马逊(Amazon)AC代码Java//解决方案(1)classSolutionpublicintminArray(int[]numbers)intmin=Math.min(numbers[0],numbers[numbers.length-1]);for(inti= 查看详情

leetcode(剑指offer)-11.旋转数组的最小数字(代码片段)

题目链接:点击打开链接题目大意:略解题思路相关企业字节跳动亚马逊(Amazon)AC代码Java//解决方案(1)classSolutionpublicintminArray(int[]numbers)intmin=Math.min(numbers[0],numbers[numbers.length-1]);for(inti= 查看详情

《剑指offer》—javascript旋转数组的最小数字

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

剑指offer11.旋转数组的最小数字154.寻找旋转排序数组中的最小值ii二分(代码片段)

地址 https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array-ii/把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组 查看详情

java剑指offer(10)旋转数组的最小数字

本文参考自《剑指offer》一书,代码采用Java语言。更多:《剑指Offer》Java实现合集  题目  把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组... 查看详情

剑指offer(c++版本)系列:剑指offer11旋转数组的最小数字(代码片段)

...度同步GitHub在此👉https://github.com/TeFuirnever/GXL-Skill-Tree剑指Offer(C++版本)系列:总目录和一些提高效率的说明剑指Offer(C++版本)系列:剑指Offer03数组中重复的数字剑指Offer(C++版... 查看详情

[剑指offer]旋转数组的最小数字

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

剑指offer11.旋转数组的最小数字(代码片段)

👋Hi~o( ̄▽ ̄)ブ这里是猪猪程序员👀很高兴见到你O(∩_∩)O!🌱现在正在发芽中…💞️博主水平有限,如果发现错误,一定要及时告知作者哦o( ̄︶ ̄)o!感谢感谢!📫博主... 查看详情

剑指offer---旋转数组的最小数字(代码片段)

题目:旋转数组的最小数字要求:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组3,4,5,1,2为1,2,3,4,5的一个旋转,该数组的最小... 查看详情