LeetCode 852. Peak Index in a Mountain Array

int peakIndexInMountainArray(vector<int>& A) {
        //二叉搜索
       int i = 0, j = A.size() - 1;
		auto m = 0;
		while (i < j) {
			m = (i + j) / 2;
			if (m == 0) {
				return A[i] > A[j] ? i : j;
			}
			if (m == A.size() - 1) {
				return A[i] > A[j] ? i : j;
			}
			if (A[m - 1] < A[m] && A[m] < A[m + 1]) {
				i = m+1;
				continue;
			}
			if (A[m - 1]<A[m] && A[m]>A[m + 1]) {
				return m;
			}
			if (A[m - 1] > A[m]&&A[m]>A[m+1]) {
				j = m-1;
			}
			
			

 思路解析:在有序数组中,我们可以用二分查找的方法,来找到目标数,判断根据为头,中,尾。然后更新头尾数。

这题采用类似思路,唯一不同的地方是,我们不采用头中尾来判断更新,而是根据中的节点梯度信息来判断。分三种情况:

1、A[m-1]<A[m]<A[m+1] 顺明当前节点为有序递增节点,我们可以更新i=m+1;

2、A[m-1]>A[m]>A[m+1] 说明当前节点为有序递减节点,我们可以更新j=m-1;

3、A[m-1]<A[m]>A[m+1] 查找到目标节点,直接返回。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值