【LeetCode-查找】寻找旋转排序数组中的最小值 II
2021-02-03 04:17
标签:排序 ffffff cto 通过 int 个数 复杂度 i++ 之间 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 题目链接: https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array-ii/ 和寻找旋转排序数组中的最小值思路类似,只是这题的数组中可能会存在重复的元素。在寻找旋转排序数组中的最小值中,我们通过nums[left]、nums[right]和nums[mid]之间的关系来判断nums[mid]位于哪个数组当中,从而缩小查找的范围。但是这题中由于重复元素的存在,可能会出现nums[left]==nums[mid]==num[right]的情况,这时候无法判断nums[mid]位于哪个数组,也无法缩小查找范围。当遇到三者相等的情况时,可以在[left, right]范围内遍历查找最小值。代码和寻找旋转排序数组中的最小值基本一样,只多加了判断三者相等的情况以及对应的处理。代码如下: 看了题解发现有更简洁的写法。只将nums[right]和nums[mid]作比较: 代码如下: 虽然这种方法更简洁,但我觉得不太好写,right的更新和二分查找不太类似。 【LeetCode-查找】寻找旋转排序数组中的最小值 II 标签:排序 ffffff cto 通过 int 个数 复杂度 i++ 之间 原文地址:https://www.cnblogs.com/flix/p/12805517.html题目描述
( 例如,数组?[0,1,2,4,5,6,7] 可能变为?[4,5,6,7,0,1,2]?)。
请找出其中最小的元素。
注意数组中可能存在重复的元素。
示例:输入: [1,3,5]
输出: 1
输入: [2,2,2,0,1]
输出: 0
做这题之前可以先做一下寻找旋转排序数组中的最小值。思路1
class Solution {
public:
int findMin(vector
思路2
class Solution {
public:
int findMin(vector
文章标题:【LeetCode-查找】寻找旋转排序数组中的最小值 II
文章链接:http://soscw.com/index.php/essay/50257.html