zoukankan      html  css  js  c++  java
  • 领扣(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 }
  • 相关阅读:
    Java链栈
    Java链栈
    java实现顺序栈
    java实现顺序栈
    求两个数的最大公约数
    求两个数的最大公约数
    一张图瞬间让你明白原型链结构
    前端面试题
    javascript学习中自己对作用域和作用域链理解
    关于javascript中静态成员和实例成员的详细解释
  • 原文地址:https://www.cnblogs.com/axiangcoding/p/9917557.html
Copyright © 2011-2022 走看看