当前位置 博文首页 > 广大菜鸟的博客:Leetcode 852. 山脉数组的峰顶索引(简答题)

    广大菜鸟的博客:Leetcode 852. 山脉数组的峰顶索引(简答题)

    作者:[db:作者] 时间:2021-09-16 22:26

    在这里插入图片描述

    1、最垃圾的暴力解法O(N)

    class Solution {
        // 暴力解法
        public int peakIndexInMountainArray(int[] arr) {
            for(int i=1;i<=arr.length-2;i++){
                if(arr[i]>arr[i-1] && arr[i] >arr[i+1]){
                    return i;
                }
            }
            return 0;
        }
    }
    

    在这里插入图片描述

    2、换个方式表达的暴力解法O(N)

    class Solution {
        // 暴力解法
        public int peakIndexInMountainArray(int[] arr) {
            int i=0;
            while(arr[i]<arr[i+1]) i++;
            return i;
        }
    }
    

    在这里插入图片描述

    class Solution {
        // 暴力解法
        public int peakIndexInMountainArray(int[] arr) {
            for(int i=0;i<=arr.length-2;i++){
                if(arr[i]<arr[i+1]){
                    while(arr[i]<arr[i+1])//首先从山峰的左边开始扫描
                        i++;
                    if(arr[i]>arr[i+1]) // 确定是arr[i]>arr[i+1]
                        return i;
                }
            }
            return -1;
        }
    }
    

    在这里插入图片描述

    3、二分法O(logN)

    class Solution {
        // 暴力解法
        public int peakIndexInMountainArray(int[] arr) {
            int low=0,high=arr.length-1,mid;
            while(low<high){
                mid = (low+high)>>1;
                if(arr[mid]<arr[mid+1])
                    low = mid+1;
                else
                    high = mid;
            }
            return low;
        }
    }
    

    在这里插入图片描述

    class Solution {
        // 暴力解法
        public int peakIndexInMountainArray(int[] arr) {
         // 1.[定左右]
            int low=0,high=arr.length-1,mid;
               // 2.[定区间]
            while(low<=high){
              // 3.[取中值]
                mid = (low+high)>>1;
                  // 4.[进退]
                if(arr[mid]<arr[mid+1])// 上坡
                    low = mid+1; // [爬坡]
                else  if(arr[mid-1]>arr[mid])// 下坡
                    high = mid -1;// [返回坡顶]
                else
                    return mid;
            }
             // 5.[无功而返]
            return -1;
        }
    }
    

    在这里插入图片描述

    cs