当前位置:网站首页>【每日一题】【leetcode】25. 数组-旋转数组的最小数字
【每日一题】【leetcode】25. 数组-旋转数组的最小数字
2022-08-10 15:04:00 【aneutron】
题目
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 难易程度:easy
示例 1:
输入:[3,4,5,1,2] 输出:1
示例 2:
输入:[2,2,2,0,1] 输出:0
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解
方法一
分析
首先,题目中给出的数组是部分有序。最小的元素就是旋转点:
- 前后元素都比他大
- 前边的子数组是递增的
- 后边的子数组是递增的
因此,直观的解法就是遍历,找到第一个位置:numbers[l] < numbers[r]。 时间复杂度:O(N) 空间复杂度:O(1)
代码
class Solution {
public:
int minArray(vector<int>& numbers) {
int l = 0, r = numbers.size() - 1;
while (l < r) {
if (numbers[l] >= numbers[r]) {
l++;
} else {
break;
}
}
return numbers[l];
}
};方法二
分析
题意已经明确,原始数组是由有序数组旋转生成,设最小值的索引为mid,则[0, mid)和[mid, size)是两个有序数组。查找最小值本身就是搜索问题。本题题意抽取出如下两点:
- 有序
- 查找
因此,可以考虑二分搜索算法,判断条件如下;
numbers[mid] > numbers, 则l = mid + 1numbers[mid] < numbers, 则r = midnumbers[mid] == numbers,特殊的点就在这儿,此时,最小值只能在[l, r),因此r--
时间复杂度:O(logN) 空间复杂度:O(1)
代码
class Solution {
public:
int minArray(vector<int>& numbers) {
int l = 0, r = numbers.size() - 1;
while (l < r) {
int mid = ((r - l) >> 1) + l;
if (numbers[mid] > numbers[r]) {
l = mid + 1;
} else if (numbers[mid] < numbers[r]) {
r = mid;
} else {
r--;
}
}
return numbers[r];
}
};边栏推荐
猜你喜欢

Azure IoT Partner Technology Empowerment Workshop: IoT Dev Hack

E-commerce spike project harvest (2)

APP automation testing with Uiautomator2

scala集合

Introduction to the functional logic of metaForce Fosage 2.0 system development

An ABAP tool that can print the browsing history of a user in the system for BSP applications

Redis -- Nosql

解题-->在线OJ(十九)

fatal error C1083 Unable to open include file 'io.h' No such file

Mysql语句分析、存储引擎、索引优化等详情
随机推荐
Appium进行APP自动化测试
scala集合
[Semantic Segmentation] DeepLab Series
Understanding_Data_Types_in_Go
容器化 | 在 S3 实现定时备份
Introduction to the Internet (2)
Rich Dad Poor Dad Reading Notes
Digital Collection Platform System Development Practice
Zhaoqi Technology Innovation High-level Talent Entrepreneurship Competition Platform
const修饰的指针变量(详解)
LeetCode_2598_剑指Offer Ⅱ 091.粉刷房子
易观千帆银行用户体验中心:聚焦银行APP用户体验
Appium for APP automation testing
Mysql语句分析、存储引擎、索引优化等详情
嵌入式开发:嵌入式基础——使用指针数组映射外设
宝塔面板开放Redis给指定外网机器
Containerization | Scheduled Backups in S3
metaForce佛萨奇2.0系统开发功能逻辑介绍
【芯片】人人皆可免费造芯?谷歌开源芯片计划已释放90nm、130nm和180nm工艺设计套件
SYM32——RTC实时时钟程序讲解