leetcode153. 寻找旋转排序数组中的最小值

假设按照升序排序的数组在预先未知的某个点上进行了旋转。

( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。

请找出其中最小的元素。

你可以假设数组中不存在重复元素。

示例 1:

输入: [3,4,5,1,2]
输出: 1

示例 2:

输入: [4,5,6,7,0,1,2]
输出: 0

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答:

对于这种类型的题目,之前已经遇到过了,就是旋转排序数组,我感觉这里的题目,还是更简单的,因为不需要多一步二分,只需要找到那个分界点。如果有不懂的,可以查找之前的leetcode33,81题目,都是一样的,这里就不多说了。

 1 class Solution {
 2     public int findMin(int[] nums) {
 3         int l=0;
 4         int r=nums.length-1;
 5         while(l<=r)
 6         {
 7             if(nums[l]<=nums[r])
 8                 return nums[l];
 9             int mid=l+(r-l)/2;
10             if(nums[mid]<nums[l])
11                 r=mid;
12             else
13                 l=mid+1;
14         }
15         return nums[r];
16     }
17 }

原文地址:https://www.cnblogs.com/cold-windy/p/11875611.html

时间: 2024-09-30 20:11:16

leetcode153. 寻找旋转排序数组中的最小值的相关文章

[Swift]LeetCode153. 寻找旋转排序数组中的最小值 | Find Minimum in Rotated Sorted Array

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

lintcode:寻找旋转排序数组中的最小值 II

寻找旋转排序数组中的最小值 II 假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2). 你需要找到其中最小的元素. 数组中可能存在重复的元素. 解题 暴力直接线性查找 或者,线性找到第一个开始降序的位置对应的数 应该考虑二分法 递归 + 二分 public class Solution { /** * @param num: a rotated sorted array * @return: the minimum number in

寻找旋转排序数组中的最小值

寻找旋转排序数组中的最小值 假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2). 你需要找到其中最小的元素. 你可以假设数组中不存在重复的元素. 注意事项 You may assume no duplicate exists in the array. 样例 给出[4,5,6,7,0,1,2]  返回 0 标签 二分法 1 class Solution { 2 public: 3 /** 4 * @param nums: a rota

LeetCode: 153. 寻找旋转排序数组中的最小值(二分查找)

假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 请找出其中最小的元素. 你可以假设数组中不存在重复元素. 示例 1: 输入: [3,4,5,1,2]输出: 1示例 2: 输入: [4,5,6,7,0,1,2]输出: 0 public int findMin(int[] nums) { int lo = 0, hi = nums.length - 1; while (lo < hi) { int

【面试题】寻找旋转排序数组中的最小值

题目描述 假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2).你需要找到其中最小的元素.http://www.lintcode.com/zh-cn/problem/find-minimum-in-rotated-sorted-array/ 解题思路 基本思想采用二分查找,不过首先要判断这个排序数组是否直接有序,如果是0 1 2 3 4 5 6 7这样的数组,最小值就是第一个值:接着就采用二分法来查找 代码实现 class Soluti

领扣(LeetCode)寻找旋转排序数组中的最小值 个人题解

假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 请找出其中最小的元素. 你可以假设数组中不存在重复元素. 示例 1: 输入: [3,4,5,1,2] 输出: 1 示例 2: 输入: [4,5,6,7,0,1,2] 输出: 0 这题拿到手发现很简单..实际上也的确比较简单.我以为会挖个什么坑在等我,但是只要使用遍历数组的办法找到下一个值比上一个小的地方,输出后值就是答案.这样做的时间复杂度是O(

LeetCode 153. 寻找旋转排序数组中的最小值

假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 请找出其中最小的元素. 你可以假设数组中不存在重复元素. 示例 1: 输入: [3,4,5,1,2]输出: 1示例 2: 输入: [4,5,6,7,0,1,2]输出: 0 算法:直接二分即可(没想到吧,不是有序数组也能二分!).这是因为旋转后的数组每一段都是有序的. class Solution { public: int findMin(vec

153. 寻找旋转排序数组中的最小值

我不复制题目了,太丑.转跳戳这里:--\(˙<>˙)/-- 这道题最简单的做法就是一个个比较,从第一个比到最后一个,但是很显然这样子太暴力了,leetcode哪里会出这种题目给我们.注意题目的字眼 “假设按照升序排序的数组在预先未知的某个点上进行了旋转”,这很明显就是想让我们用二分查找写这道题目,可这种二分该怎么写呢 . 可以将中间点与终点进行比较,会产生两种情况,两个结论 mid < right:最小值在左半部分 mid > right:最小值在右半部分 这两个结论说明,如果使用

154. 寻找旋转排序数组中的最小值 II

转跳点:--\(˙<>˙)/-- 原本打算大年三十十一起写完的,结果这篇拖到了年初一…… 这道题比刚刚那道,麻烦一点,因为有重复,所以我们需要考虑重复的情况,就是刚刚的两种情况变成了三种: mid < right:left = mid+1 mid > right:right = left; mid = right:left++: 为什么是++?题目说了升序,如果相等那么说明只有两种可能 整个数组都是一个数 旋转点极有可能就是这个数(貌似和解题无关) 所以无论如何那种情况,题设想要的