[E二分] lc852. 山脉数组的峰顶索引(二分+思维+脑筋急转弯)

Posted Ypuyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[E二分] lc852. 山脉数组的峰顶索引(二分+思维+脑筋急转弯)相关的知识,希望对你有一定的参考价值。

1. 题目来源

链接:852. 山脉数组的峰顶索引

2. 题目解析

数据太强,搞得这题没啥意思了。

等价于寻找数组中的最大值,且最大值左右两段均严格递减。

**可以一次遍历也可以二分,不过这个二分有点考思维…

  • 需要定义一个性质,该性质具有二段性,保证能够二分。这个性质就是单调性。
  • mid 出来之后,用 a[mid-1]a[mid] 的大小关系来判断 mid 再哪一段中,再进行二分即可。
  • 所以这道题至少包含 3 个值…**

时间复杂度: O ( l o g n ) O(logn) O(logn)

空间复杂度: O ( 1 ) O(1) O(1)


O ( n ) O(n) O(n)

class Solution {
public:
    int peakIndexInMountainArray(vector<int>& arr) {
        int res = 0;
        while (arr[res] < arr[res + 1]) res ++ ;
        return res;
    }
};

O ( l o g n ) O(logn) O(logn)

// 花里胡哨的二分
class Solution {
public:
    int peakIndexInMountainArray(vector<int>& arr) {
        int l = 1, r = arr.size() - 2;
        while (l < r) {
            int mid = l + r + 1 >> 1;
            if (arr[mid] > arr[mid - 1]) l = mid;
            else r = mid - 1;
        }
        return r;
    }
};

以上是关于[E二分] lc852. 山脉数组的峰顶索引(二分+思维+脑筋急转弯)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 852 山脉数组的峰顶索引[二分法] HERODING的LeetCode之路

[LeetCode] 852. 山脉数组的峰顶索引

852. 山脉数组的峰顶索引

JS Leetcode 852. 山脉数组的峰顶索引图解分析,高高的山峰一起吹山风吧。

算法二分法 ③ ( 山脉数组的峰顶索引 | 枚举法 | 二分法 )

LeetCode852. 山脉数组的峰顶索引(C++)