领扣(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