当前位置:网站首页>leetcode:153. 寻找旋转排序数组中的最小值
leetcode:153. 寻找旋转排序数组中的最小值
2022-08-03 02:04:00 【OceanStar的学习笔记】
题目来源
题目描述


题目解析
为了便于分析,我们先将数组中的数画在二维坐标系中,横坐标表示数组下标,纵坐标表示数组数值,如下所示:
我们发现:竖直虚线左边的数满足 nums[i]≥nums[0],而竖直虚线右边的数满足nums[i]< nums[0],分界点就是整个数组的最小值。数组具有二分性,所以我们可以二分出最小值的位置。
算法:
- 在[l,r]区间中, l = 0, r = nums.size() - 1,我们去二分<num[0]的最左边界。
- 当nums[mid] < nums[0]时,往左边区域找,r = mid。
- 当nums[mid] >= nums[0]时,往右边区域找,l = mid + 1。
- 当二分的范围缩小至一个数时,就是最小值的位置。
class Solution {
public:
int findMin(vector<int>& nums) {
int l = 0, r = nums.size() - 1;
if(nums[r] > nums[l]) return nums[0]; //升序数组,数组完全单调,第一个数最小
while(l < r)
{
int mid = (l + r)/2;
if(nums[mid] < nums[0]) r = mid;
else l = mid + 1;
}
return nums[r];
}
};
思路
class Solution {
public:
// 思路跟翻转数组一样,等分后的数组一定有一个是有序的,有序的数组取最左数为min,接着对之后的数组进行同样的操作。
int findMin(vector<int>& nums) {
int minVal = INT32_MAX;
int l = 0, r = nums.size() - 1;
while (l <= r) {
int m = l + (r - l) / 2;
int lv = nums[l], mv = nums[m], rv = nums[r];
if (lv == mv) {
// 只有2个数了, 初始1个也在其中
minVal = min(minVal, min(lv, rv));
break;
}
if (lv < mv) {
// 左半边有序
minVal = min(minVal, lv);
l = m + 1;
} else {
// 右半边有序
minVal = min(minVal, mv);
r = m - 1;
}
}
return minVal;
}
};
class Solution {
public:
int findMin(vector<int>& nums) {
int min = nums[0];
int left = 0, right = nums.size() -1;
while (left<=right){
int mid = (right-left)/2+left;
if (nums[mid]<nums[right]){
right = mid-1;
}else {
left = mid+1;
}
if (nums[mid]<min)
min = nums[mid];
}
return min;
}
};
思路:
只有三种情况
- 1.中间值大于两端,则说明最小值在右侧
- 2.中间值小于两端,则说明最小值在左侧
- 3.中间值介于两者之间,则说明此时已按顺序排列,最小值就是L
当LR相邻的时候就可以break了,此时LR中必定有一个是最小值
边栏推荐
猜你喜欢
随机推荐
radio button、qss文件环境配置
[QNX Hypervisor 2.2用户手册]10 虚拟设备参考
国标GB28181协议EasyGBS平台项目现场通知消息过多导致系统卡顿该如何解决?
370万欧元!西班牙iPronics加速可重构光子芯片商用
pytorch 中 permute()函数的用法
IDEA基本使用-创建和删除项目
【静态类型和动态类型 编译检查和运行检查 Objective-C中】
二叉树的前序遍历、中序遍历、后序遍历和层序遍历
Wireshark data capture and analysis of the transport layer protocol (TCP protocol)
How does Excel compare if two columns of strings are the same?
10大领域5大过程47子过程快速记忆
开发JSP应用的基础知识
FLIR E95 在8层楼看马路上行驶的CAR的热成像形态?
韦东山 数码相框 项目学习(五)libjpeg-turbo的移植
豆瓣评分9.3的好书,文末给大家抽奖送几本!
[Arduino] Reborn Arduino Monk (3)----Arduino function
Topic Modeling of Short Texts: A Pseudo-Document View
LVS-NAT模式【案例实验】
面试题整理1
Usage of permute() function in pytorch









