zoukankan      html  css  js  c++  java
  • 153. 寻找旋转排序数组中的最小值

     方法一:直接遍历。从头到尾遍历,找最小值,时间复杂度o(n)。

    class Solution {
        public int findMin(int[] nums) {
           
            int len=nums.length;
            int min=Integer.MAX_VALUE;
            for(int i=0;i<len;i++)
            {
                if(nums[i]<min)
                {
                    min=nums[i];
                }
            }
            return min;
    }
    }
    

     方法二:看题目,找的应该是个转折点,从初始下标开始,是递增的,之后有个点,突然断崖式下降,之后又一次递减。可以用二分法找

    1.假如mid表示的点大于mid+1表示的点,说明mid+1就是转折点。

    2.假如mid这个点,大于start,说明现在处在左侧的递增序列,转折点在右边。

    3.mid点小于start,说明转折点在左边

    class Solution {//二分法的新解?
        public int findMin(int[] nums) {
           if(nums.length==1) return nums[0];
            int start=0;
            int end=nums.length-1;
            if(nums[start]<nums[end])//开头小于结尾,说明没有翻转
            {
                return nums[start];
            }
            while(start<end)
            {
                int mid=(start+end)/2;
                if(nums[mid]>nums[mid+1])//遇到转折点
                {
                    return nums[mid+1];
                }
                if(nums[start]<nums[mid])//最左边的点小于mid,说明正处在上升队列在右侧找转折点
                {
                    start=mid+1;
                }
                else//初始点大于中间点,说明处在第二段的上升区间,转折点应该在左侧
                {
                    end=mid;
                }
            }
            return -1;
    
    }
    }
    

      

  • 相关阅读:
    Maven中profile和filtering实现多个环境下的属性过滤
    Java 非法字符: 65279的解决办法
    MySQL军规
    php 时间日期函数
    函数的引入
    linux下修改mysql版本5.7 修改默认字符集
    mysql语句规范
    永久修改mysql提示符
    复杂函数
    函数的特性
  • 原文地址:https://www.cnblogs.com/lzh1043060917/p/12921682.html
Copyright © 2011-2022 走看看