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 }
  • 相关阅读:
    获取其他进程中StatusBar的文本
    TStringGrid多选的复制与拷贝
    常用数据结构
    数据结构及算法
    时间复杂度和空间复杂度详解
    算法的时间复杂度和空间复杂度
    新增并管理媒体资源
    Node.js与MongoDB的基本连接示例
    Web API 2:Action的返回类型
    快递查询组件
  • 原文地址:https://www.cnblogs.com/axiangcoding/p/9917557.html
Copyright © 2011-2022 走看看