当前位置: 首页 > news >正文

LeetCode_二分搜索_困难_154.寻找旋转排序数组中的最小值 II

目录

  • 1.题目
  • 2.思路
  • 3.代码实现(Java)

1.题目

已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,4,4,5,6,7] 在变化后可能得到:

  • 若旋转 4 次,则可以得到 [4,5,6,7,0,1,4]
  • 若旋转 7 次,则可以得到 [0,1,4,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 ,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的最小元素

你必须尽可能减少整个过程的操作步骤。

示例 1:
输入:nums = [1,3,5]
输出:1

示例 2:
输入:nums = [2,2,2,0,1]
输出:0

提示:
n == nums.length
1 <= n <= 5000
-5000 <= nums[i] <= 5000
nums 原来是一个升序排序的数组,并进行了 1 至 n 次旋转

进阶:这道题与 寻找旋转排序数组中的最小值 类似,但 nums 可能包含重复元素。允许重复会影响算法的时间复杂度吗?会如何影响,为什么?

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-minimum-in-rotated-sorted-array-ii

2.思路

(1)二分搜索
本题与153.寻找旋转排序数组中的最小值这题类似,只不过本题中的 nums 数组可能包含重复元素。

相关题目:
LeetCode_二分搜索_中等_33.搜索旋转排序数组
LeetCode_二分搜索_中等_81.搜索旋转排序数组 II
LeetCode_二分搜索_中等_153.寻找旋转排序数组中的最小值

3.代码实现(Java)

//思路1————二分搜索
class Solution {public 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]) {//如果 nums[mid] > nums[right],说明最小值在 mid 右侧left = mid + 1;} else if (nums[mid] < nums[right]) {//如果 nums[mid] < nums[right],说明最小值在 mid 左侧或者就是 mid 本身right = mid;} else {//如果 nums[mid] == nums[right],我们无法判断最小值在 mid 的左侧还是右侧,因此将右边界缩小一位right--;}}return nums[left];}
}
http://www.lryc.cn/news/32916.html

相关文章:

  • 面向对象设计模式:创建型模式之建造者模式
  • 集成学习boosting、bagging、stacking
  • 数据模型(上):模型分类和模型组成
  • 郑州轻工业大学2022-2023(2) 数据结构题目集 - ZZULI
  • 【Python语言基础】——Python MySQL Drop Table
  • 2023美团面试真题
  • 【微信小程序开发全流程】篇章0:基于JavaScript开发的校园综合类微信小程序的概览
  • 如何分析sql性能
  • 市场营销书籍推荐:《经理人参阅:市场营销》
  • WPF 控件专题 MediaElement控件详解
  • 基于SpringBoot+SpringCloud+Vue前后端分离项目实战 --开篇
  • 循环队列的实现
  • MTK平台开发入门到精通(休眠唤醒篇)休眠唤醒LPM框架
  • ThreadLocal详解
  • 利用Cookie劫持+HTML注入进行钓鱼攻击
  • 【接口汇总】常用免费的API
  • 数字信号处理知识点
  • 计算机网络第八版——第三章课后题答案(超详细)
  • 九龙证券|磷酸亚铁锂是什么?磷酸亚铁锂的特点和性能介绍
  • 3D目标检测(二)—— 直接处理点云的3D目标检测网络VoteNet、H3DNet
  • Java学习-IO流-常用工具包(hutool)
  • 【LeetCode】1. 两数之和
  • 【数值模型环境搭建】Intel编译器安装
  • 操作VMware vCenter Converter 实现物理机迁移到虚拟机
  • hutool XML反序列化漏洞(CVE-2023-24162)
  • Java简单认识泛型——图文详解
  • AcWing171.送礼物
  • 领域驱动设计-架构篇
  • docker安装kafka
  • Selenium4+Python3系列(十一) - Page Factory设计模式