当前位置:网站首页>【LeetCode每日一题】——153.寻找旋转排序数组中的最小值
【LeetCode每日一题】——153.寻找旋转排序数组中的最小值
2022-08-07 03:10:00 【IronmanJay】
一【题目类别】
- 二分查找
二【题目难度】
- 中等
三【题目编号】
- 153.寻找旋转排序数组中的最小值
四【题目描述】
- 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到:
- 若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]
- 若旋转 7 次,则可以得到 [0,1,2,4,5,6,7]
- 注意,数组 [a[0], a[1], a[2], …, a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], …, a[n-2]] 。
- 给你一个元素值 互不相同 的数组 nums ,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的 最小元素 。
- 你必须设计一个时间复杂度为 O(log n) 的算法解决此问题。
五【题目示例】
示例 1:
输入:nums = [3,4,5,1,2]
输出:1
解释:原数组为 [1,2,3,4,5] ,旋转 3 次得到输入数组。示例 2:
输入:nums = [4,5,6,7,0,1,2]
输出:0
解释:原数组为 [0,1,2,4,5,6,7] ,旋转 4 次得到输入数组。示例 3:
输入:nums = [11,13,15,17]
输出:11
解释:原数组为 [11,13,15,17] ,旋转 4 次得到输入数组。
六【题目提示】
- n == nums.length
- 1 <= n <= 5000
- -5000 <= nums[i] <= 5000
- nums 中的所有整数 互不相同
- nums 原来是一个升序排序的数组,并进行了 1 至 n 次旋转
七【解题思路】
- 主要还是二分查找的思路
- 但是要判断数组右边的值,因为我们要找最小值,首先判断数组中间值是否小于数组右边界,如果小于的话,右边界值更新为数组中间值索引,因为右边界值比中间值大,那么最小值肯定不在右边,所以要向左边搜索,而且右边界值更新为数组中间值索引的目的是,有可能数组中间值就是最小的,先保存下来
- 如果中间值大于或等于数组右边界,那么最小值肯定在右边,向右搜索即可
- 最后返回数组左边界索引指向的值即可,这时候肯定是最小值,因为是右边(较大值)收缩过来的
八【时间频度】
- 时间复杂度: O ( l o g 2 N ) O(log_{2}N) O(log2N),其中 N N N为数组长度
- 空间复杂度: O ( 1 ) O(1) O(1)
九【代码实现】
- Java语言版
package BinarySearch;
public class p153_FindTheMinimumValueInARotatedSortedArray {
public static void main(String[] args) {
int[] nums = {
3, 4, 5, 1, 2};
int res = findMin(nums);
System.out.println("res = " + res);
}
public static int findMin(int[] nums) {
int left = 0;
int right = nums.length - 1;
while (left < right) {
int mid = left + (right - left) / 2;
if (nums[mid] < nums[right]) {
right = mid;
} else {
left = mid + 1;
}
}
return nums[left];
}
}
- C语言版
#include<stdio.h>
int findMin(int* nums, int numsSize)
{
int left = 0;
int right = numsSize - 1;
while (left < right)
{
int mid = left + (right - left) / 2;
if (nums[mid] < nums[right])
{
right = mid;
}
else
{
left = mid + 1;
}
}
return nums[left];
}
/*主函数省略*/
十【提交结果】
Java语言版

C语言版

边栏推荐
- When will LayoutSubviews be called
- Definition and operation process of OAuth2
- LVS load balancing cluster
- The difference between target and currentTarget in WeChat applet
- POST request
- Definition and operation process of OAuth2
- 微信小程序的在线学习每日签到打卡 项目源码介绍
- 82-FastDFS详解
- pytorch: dataloader custom data set production
- Wechat applet online learning daily check-in and punch-in project source code introduction
猜你喜欢
![Rasa 3.x Learning Series - Rasa [3.2.5] - 2022-08-05 New version released](/img/db/4fd216ae8e2278cc640ce20501f2b2.png)
Rasa 3.x Learning Series - Rasa [3.2.5] - 2022-08-05 New version released

82-FastDFS详解

大型网站高并发解决方案——集群

超级水王问题

A Method for Ensuring Data Consistency of Multi-Party Subsystems

STM32 - RTC real-time clock principle + BKP register principle

82-FastDFS detailed explanation

损失函数_相似度计算_距离计算

TensorFlow学习记录(五):卷积神经网络

LED驱动程序优化-分层
随机推荐
Tensorflow2.0入门
How to smoothly render tens of millions of 2D objects with WebGPU: based on the ray tracing line
In-depth analysis of FutureTask source code
利用PHP的特性做免杀Webshell
Yarn学习,Yarn安装,Yarn常用命令。这一篇即可(有需要再补充)
golang通过map嵌套读取json(type interface {} does not support indexing)
X 进制减法
面试字节跳动测试岗被吊打,60天苦修这些笔记,侥幸收获offer
权重的初始化总结
Getting Started with Tensorflow 2.0
Definition and operation process of OAuth2
微信小程序的民宿客房预订uniapp小程序
Scala object class basic grammar explanation
KingbaseESV8R3对于order by null列的处理
C语言从入门到精通 【精读C Prime Plus】【C语言笔记1-4章节】【更新中~】
TensorFlow学习记录(五):卷积神经网络
KingbaseES V8R3集群管理维护案例之---集群迁移单实例架构
JUC源码学习笔记4——原子类,CAS,Volatile内存屏障,缓存伪共享与UnSafe相关方法
[transfer] swig
德迅云安全提供国内卓越、快速、稳定的高防产品