LeetCode 153. Find Minimum in Rotated Sorted Array寻找旋转排序数组中的最小值 (C++)
题目:
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e.,  [0,1,2,4,5,6,7] might become  [4,5,6,7,0,1,2]).
Find the minimum element.
You may assume no duplicate exists in the array.
Example 1:
Input: [3,4,5,1,2]
Output: 1
Example 2:
Input: [4,5,6,7,0,1,2]
Output: 0
分析:
给定了一个升序排序的数组且在某个点上进行了旋转。也就是[1,2,3,4,5]可能变成[3,4,5,1,2]。求其中的最小元素,且数组中没有重复元素。
遍历一遍数组直接求得最小元素,时间复杂度时O(n),不过很明显,题目中给定的数组是“有序的”,我们可以利用这个特点来更快的求解此问题。
如果给定一个有序数组(无旋转的),我们可以立刻知道数组中最小的元素就是第一个元素,而在这道题中,我们可以使用二分法来求解,而且每一次分割,必定会产生一个有序数组,和一个有可能有序的数组。
比如:[4,5,6,7,0,1,2]如果分割成[4,5,6,7]和[0,1,2],两个都是有序数组,我们可以立刻知道他们两个的最小值是4和0,再求一次min即可。当然这是最好的情况,即一次分割两个数组均有序。
当然大多数情况可能是其中一个有序,另一个是旋转有序的。
例如:[4,5,6,7,0,1,2]如果分割成[4,5,6]和[7,0,1,2],左侧的数组是有序的,右侧是旋转有序的,那么左面我们可以立刻得到最小值4,右侧则继续二分求解即可。
判断数组是否有序很简单,即数组左侧的元素是否小于右侧的,如果小于,则数组有序。
当数组剩两个元素的时候直接返回其中的最小值即可。
程序:
class Solution {
public:
    int findMin(vector<int>& nums) {
        if(nums.size()==) return nums[];
        int l = ;
        int r = nums.size()-;
        return find(nums, l, r);
    }
    int find(vector<int>& nums, int l, int r){
        if(nums[l] < nums[r] || l==r) return nums[l];
        if(r-l == ) return min(nums[l], nums[r]);
        int mid = (l+r)/;
        return min(find(nums, l, mid-), find(nums, mid, r));
    }
};
LeetCode 153. Find Minimum in Rotated Sorted Array寻找旋转排序数组中的最小值 (C++)的更多相关文章
- [LeetCode] 153. Find Minimum in Rotated Sorted Array  寻找旋转有序数组的最小值
		Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ... 
- Leetcode153. Find Minimum in Rotated Sorted Array寻找旋转排序数组中最小值
		假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 请找出其中最小的元素. 你可以假设数组中不存在重 ... 
- [LeetCode] Find Minimum in Rotated Sorted Array  寻找旋转有序数组的最小值
		Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ... 
- leetcode题解:Search in Rotated Sorted Array(旋转排序数组查找)
		题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 ... 
- Leetcode之二分法专题-153. 寻找旋转排序数组中的最小值(Find Minimum in Rotated Sorted Array)
		Leetcode之二分法专题-153. 寻找旋转排序数组中的最小值(Find Minimum in Rotated Sorted Array) 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ... 
- Leetcode之二分法专题-154. 寻找旋转排序数组中的最小值 II(Find Minimum in Rotated Sorted Array II)
		Leetcode之二分法专题-154. 寻找旋转排序数组中的最小值 II(Find Minimum in Rotated Sorted Array II) 假设按照升序排序的数组在预先未知的某个点上进 ... 
- [Swift]LeetCode154. 寻找旋转排序数组中的最小值 II | Find Minimum in Rotated Sorted Array II
		Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ... 
- LeetCode(力扣)——Search in Rotated Sorted Array 搜索旋转排序数组  python实现
		题目描述: python实现 Search in Rotated Sorted Array 搜索旋转排序数组 中文:假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1 ... 
- LeetCode:寻找旋转排序数组中的最小值【153】
		LeetCode:寻找旋转排序数组中的最小值[153] 题目描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0 ... 
随机推荐
- js支持装饰器
			vscode中使用装饰器不报错 { "compilerOptions": { "experimentalDecorators": true } } yarn a ... 
- Programming | 获取图像频域并分解为高低频
			1. DCT变换 参考:https://stackoverflow.com/questions/22322427/decomposing-an-image-into-two-frequency-com ... 
- Java 并发系列之十三:安全发布
			1. 定义 发布对象(Publish): 使一个对象能够被当前范围之外的代码所使用 对象逸出(Escape): 一种错误的发布.当一个对象还没有构造完成时,就使它被其他线程所见 1.1 发布对象 pu ... 
- antdmobile组件思维导图
- N!(hdu1042)
			N! Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N! Input One N in one line, process ... 
- Focal Loss 理解
			本质上讲,Focal Loss 就是一个解决分类问题中类别不平衡.分类难度差异的一个 loss,总之这个工作一片好评就是了. 看到这个 loss,开始感觉很神奇,感觉大有用途.因为在 NLP 中,也存 ... 
- 截图自动添加水印图片工具 pickpick设置中文语言
			推荐一款截图工具,主要是可以截图自动带水印,效果不错 最近发现我的不少文章被转载的到处都是.乱七八糟,这个功能后续准备做个水印用起来,感觉不错 主角介绍 首先介绍下主角 PickPick 
- 一个简单的利用 WebClient 异步下载的示例(五)(完结篇)
			接着上一篇,我们继续来优化.我们的 SkyParallelWebClient 可否支持切换“同步下载模式”和“异步下载模式”呢,好处是大量的代码不用改,只需要调用 skyParallelWebClie ... 
- JVM的监控工具之jconsole
			JConsole(Java Monitoring and Management Console)是一种基于JMX的可视化监视.管理工具.管理的是什么?管理的是监控信息.永久代的使用信息.类加载等等 如 ... 
- CSS3特效之转化(transform)和过渡(transition)
			CSS3特效之转化(transform)和过渡(transition) 在对动画深入之前,我们需要先了解它的一些特性,CSS3的转化(transform)和过渡(transition).有人可能会有疑 ... 
