其他分享
首页 > 其他分享> > 浅谈 山脉数组的峰顶索引 问题

浅谈 山脉数组的峰顶索引 问题

作者:互联网

山脉数组的峰顶索引

问题:
符合下列属性的数组 arr 称为 山脉数组 :

arr.length >= 3

存在 i(0 < i < arr.length - 1)使得:

arr[0] < arr[1] < ... arr[i-1] < arr[i]
arr[i] > arr[i+1] > ... > arr[arr.length - 1]

给你由整数组成的山脉数组 arr ,返回任何满足 arr[0] < arr[1] < ... arr[i - 1] < arr[i] > arr[i + 1] > ... > arr[arr.length - 1] 的下标 i

思路:
由于题目过于简单,限制了传入参数必为山脉数组,所以一次遍历找出最大值下标返回即可。
法二:二分查找。

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

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

// 二分查找
class Solution {
public:
    int peakIndexInMountainArray(vector<int>& arr) {
        size_t left = 1, right = arr.size() - 2;
        while(left <= right) {
            size_t mid = (left + right) / 2;
            if(arr[mid] < arr[mid + 1]) {
                left = mid + 1;
            }
            else {
                right = mid - 1;
            }
        }
        return left;
    }
};

时间复杂度:O(log(n))
空间复杂度:O(1)

  • 拓展:给一个数组,判断它是否为山脉数组,如果不是返回 0;是返回峰顶索引。

标签:...,arr,峰顶,浅谈,mid,索引,数组,size,left
来源: https://blog.csdn.net/weixin_48033173/article/details/117935000