LeetCode刷题153-中等-寻找旋转数组的最小值
Posted 布小禅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode刷题153-中等-寻找旋转数组的最小值相关的知识,希望对你有一定的参考价值。
☀️ 前言 ☀️
算法作为极其重要的一点,是大学生毕业找工作的核心竞争力,所以为了不落后与人,开始刷力扣算法题!
🙀 作者简介 🙀
大家好,我是布小禅,一个尽力让无情的代码变得生动有趣的IT小白,很高兴能偶认识你,关注我,每天坚持学点东西,我们以后就是大佬啦!
📢 博客主页:❤布小禅❤
📢 作者专栏:
❤Python❤
❤Java❤这是我刷第 42/100 道力扣简单题
💗 一、题目描述 💗
已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到:
若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]
若旋转 7 次,则可以得到 [0,1,2,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 ,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的 最小元素 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
示例1:
输入:nums = [3,4,5,1,2]
输出:1
解释:原数组为 [1,2,3,4,5] ,旋转 3 次得到输入数组。
示例2:
输入:nums = [4,5,6,7,0,1,2]
输出:0
解释:原数组为 [0,1,2,4,5,6,7] ,旋转 4 次得到输入数组。
示例3:
输入:nums = [11,13,15,17]
输出:11
解释:原数组为 [11,13,15,17] ,旋转 4 次得到输入数组。
提示:n == nums.length
1 <= n <= 5000
-5000 <= nums[i] <= 5000
nums 中的所有整数 互不相同
nums 原来是一个升序排序的数组,并进行了 1 至 n 次旋转
💁 二、题目解析 💁
思 路 1 : \\color{green}{思路1:} 思路1:
先排序,再输出第一个元素
思 路 2 : \\color{green}{思路2:} 思路2:
看了一下题目标签是数组和二分法
那就使用二分查找法
但是一般二分法使用在有序数组中,这怎么办呢?
我们的这个数组也算是有序,因为他是由有序数组旋转过来的
我们想使用二分法,就要找到判断条件
判断中间值与最后一个元素的大小
如果中间值大于最后一个元素
- 让最开始指针移到中间+1
反之让后面的指针移到中间
🏃 三、代码 🏃
☁️ 1️⃣. python ☁️
思路1:
class Solution:
def findMin(self, nums: List[int]) -> int:
nums.sort()
return nums[0]
思路2:
class Solution:
def findMin(self, nums: List[int]) -> int:
start = 0
end = len(nums)-1
while start<end:
mid = (start+end)//2
if nums[mid]<nums[end]: end = mid
else: start = mid + 1
return nums[start]
❄️ 2️⃣. C# ❄️
思路1:
public class Solution {
public int FindMin(int[] nums){
Array.Sort(nums);
return nums[0];
}
}
思路2:
public class Solution {
public int FindMin(int[] nums)
{
int start = 0;
int end = nums.Length - 1;
int mid = 0;
while (start < end)
{
mid = start + (end - start)/2;
if (nums[mid] < nums[end]) end = mid; // 比最后一个元素大
else start = mid + 1; // 比最后一个元素小
}
return nums[start];
}
}
🌔 结语 🌔
坚持最重要,每日一题必不可少!😸
期待你的关注和督促!😛
以上是关于LeetCode刷题153-中等-寻找旋转数组的最小值的主要内容,如果未能解决你的问题,请参考以下文章