当前位置:网站首页>【每日一题】【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];
}
};边栏推荐
猜你喜欢

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

APP automation testing with Uiautomator2

Introduction to the functional logic of metaForce Fosage 2.0 system development

fatal error C1083 无法打开包括文件'io.h' No such file

一个 ABAP Development Tool 自定义 service endpoint 的测试工具

Redis -- Nosql

Azure IoT Partner Technology Empowerment Workshop: IoT Dev Hack

Recommend a few had better use the MySQL open source client, collection!

富爸爸穷爸爸之读书笔记

SWIG教程《二》
随机推荐
SWIG tutorial "four" - package of go language
第壹章模块大全之《re模块》
$'\r': command not found
Please check the preparation guide for the 2022 Huawei Developer Competition
Boss raises salary!Look at my WPF Loading!!!
MySQL Principle and Optimization: Update Optimization
scala集合
Methodology of multi-living in different places
640. 求解方程 : 简单模拟题
格式化输出当前时间
Problem solving-->Online OJ (19)
Zhaoqi Technology Innovation High-level Talent Entrepreneurship Competition Platform
SWIG tutorial "two"
FP6378AS5CTR SOT-23-5 高效1MHz2A同步降压调节器
JS 从零手写实现一个bind方法
Pagoda panel open Redis to specify the network machine
Opencv 图像超像素分割(SLIC、SEEDS、LSC)
pm2之静态文件服务
Chapter II Module Encyclopedia "collections Module"
systemui屏蔽通知栏