【LeetCode】852. Peak Index in a Mountain Array

题目:


简述题目:

    题目的要求其实就是找出数组中的一个“中间数”,也就是整个数组中的一个“峰值”的index

思路:

    1、依次遍历,然后找出那个A[i] >= A[i-1] && A[i] < A[i+1]的i值,但时间复杂度为O(n)

    2、二分查找,如果A[mid] < A[mid+1] ,就在后半段找,反之就在前半段找,时间复杂度为O(log(n))

public class peakIndexInMountainArray852 {
    public static int peakIndexInMountainArray(int[] A) {
//直接遍历法,时间复杂度为O(n)
//    	for(int i = 0; i < A.length;i++){
//        	if(A[i] > A[i+1])
//        		return i;
//        	}
//    	return -1;
// 二分查找,时间复杂度为O(log(n))
    	int l = 0;
    	int r = A.length -1;
    	int mid = 0;   	
    	while(l < r){
    		mid = (l+r)/2;
    		if(A[mid] <= A[mid + 1]){
    			l = mid +1;
    		}
    		else{
    			r = mid;
    		}
    	}
    	return l;
    }
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] A = {0,2,2,3,1,0};
		System.out.println(peakIndexInMountainArray(A));
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值