zoukankan      html  css  js  c++  java
  • 小米面试算法题:求一个先升序后降序得数组的最大值

    求一个先升序后降序得数组的最大值

    使用遍历的方式,时间复杂度最大O(N),只需要把当前节点和前一个节点、后一个节点进行比较。如果比前一个节点大,也比后一个节点大,那么就是要找的数据。如果数组小于3或者找不到这样的数,返回-1.

        //使用遍历O(n)的时间复杂度
        int findPeak(int nums[]){
            if(nums==null||nums.length<3){
                return -1;
            }
            for(int i=1;i<nums.length-1;i++){
                if(nums[i]>nums[i-1]&&nums[i]>nums[i+1]){
                    return nums[i];
                }
            }
            return -1;
        }

    使用logn的时间复杂度的二分查找算法:

    package com.andy.arithmetic;
    
    public class FindMax {
        public static void main(String[] args) {
            int[] nums={1,2,3,4,5,6,5,4,3,2,1};
            int peak = new FindMax().findPeak(nums);
            int i = new FindMax().binarySearchPeak(nums);
    
            System.out.println(peak);
    
            System.out.println(i);
    
    
        }
    
        //使用遍历O(n)的时间复杂度
        int findPeak(int nums[]){
            if(nums==null||nums.length<3){
                return -1;
            }
            for(int i=1;i<nums.length-1;i++){
                if(nums[i]>nums[i-1]&&nums[i]>nums[i+1]){
                    return nums[i];
                }
            }
            return -1;
        }
    
        //二分查找的方式
        int binarySearchPeak(int arr[])
        {
            int left=0;
            int right=arr.length-1;
            while(left<=right){
                int mid=(left+right)>>>1;
                if(mid==0||mid==arr.length-1){
                    return -1;
                }
                if(arr[mid-1]<arr[mid]&&arr[mid]>arr[mid+1]){
                    return arr[mid];
                }else if(arr[mid-1]<arr[mid]&&arr[mid+1]>arr[mid]){
                    left=mid+1;
                }else if(arr[mid-1]>arr[mid]&&arr[mid]>arr[mid+1]){
                    right=mid-1;
                }
            }
            return -1;
        }
    }
  • 相关阅读:
    关于万门大学api接口反爬措施的解决
    磁盘
    汇编实验九
    汇编语言第六章-包含多个段的程序
    汇编实验四
    汇编实验二
    汇编语言实验四
    汇编语言第四章——第一个程序
    汇编语言第三章——寄存器(内存访问)
    汇编语言第二张寄存器
  • 原文地址:https://www.cnblogs.com/mkl34367803/p/14765106.html
Copyright © 2011-2022 走看看