剑指 Offer II 069. 山峰数组的顶部(852. 山脉数组的峰顶索引)

题目:

 

 

 

 

 

 

思路:

【1】其实也没什么好思考的,题目给的数组就是山脉数组,可以理解为是有序的,其次,提示的复杂度就是叫你如何用二分去处理有序数组。

代码展示:

//时间复杂度O(N)的方式
//时间0 ms击败100%
//内存41.6 MB击败67.49%
class Solution {
    public int peakIndexInMountainArray(int[] arr) {
        int n = arr.length;
        int ans = -1;
        for (int i = 1; i < n - 1; ++i) {
            if (arr[i] > arr[i + 1]) {
                ans = i;
                break;
            }
        }
        return ans;
    }
}

//时间复杂度O(log(n))的方式
//时间0 ms击败100%
//内存41.7 MB击败62.66%
class Solution {
    public int peakIndexInMountainArray(int[] arr) {
        int n = arr.length;
        int left = 1, right = n - 2, ans = 0;
        while (left <= right) {
            int mid = (left + right) / 2;
            if (arr[mid] > arr[mid + 1]) {
                ans = mid;
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return ans;
    }
}

 

posted @ 2023-03-01 16:09  忧愁的chafry  阅读(13)  评论(0编辑  收藏  举报