文章目录
☀️ 前言 ☀️
算法作为极其重要的一点,是大学生毕业找工作的核心竞争力,所以为了不落后与人,开始刷力扣算法题!
???? 作者简介 ????
大家好,我是布小禅,一个尽力让无情的代码变得生动有趣的IT小白,很高兴能偶认识你,关注我,每天坚持学点东西,我们以后就是大佬啦!
???? :❤布小禅❤
???? 作者专栏:
这是我刷第 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
先排序,再输出第一个元素
思路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:
???? 结语 ????
坚持最重要,每日一题必不可少!????
期待你的关注和督促!????