领扣(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(n)。在LeetCode的评测中,使用JAVA打败了62%的人,使用C打败了100%的人 XD
同时,我以为是题目设置问题,去度娘了一下,发现了还有二分的做法,使用二分做法也完成了,时间复杂度是O(logn),但是在这题的测试环境中反而比遍历的做法要慢。
附上两种做法代码:

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

原文地址:https://www.cnblogs.com/axiangcoding/p/9917557.html

时间: 2024-10-05 00:19:47

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

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

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

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

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

[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

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

题目描述 假设一个旋转排序的数组其起始位置是未知的(比如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

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

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

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

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