BM19 寻找峰值

二分查找法

public int findPeakElement (int[] nums) {
        // write code here

        //数组长度为0,峰值没有
        if (nums.length == 0) return -1;

        //只有一个元素时,峰值就是他自己
        if (nums.length == 1) return 0;

        //定义左指针和右指针
        int left = 0;
        int right = nums.length - 1;
        
        //初始化中间值
        int mid = 0;
        while (left < right) {
            
            //mid为中间值
            mid = (left + right) / 2;
            
            //mid大于mid+1,说明右边更大,向左边收缩
            if (nums[mid] > nums[mid + 1]) {
                right = mid;
            }
            //否则就是最大值在mid的右边,最起码,mid+1是比mid大的
            else
                left = mid + 1;
        }
        
        return right;
    }

你可能感兴趣的:(二分查找/排序,数据结构)