162. 寻找峰值

162. 寻找峰值

    public int findPeakElement(int[] nums) {
        int low = 0;
        int high = nums.length - 1;
        while (low < high) {
            int mid = low + (high - low) / 2;
            if (nums[mid] < nums[mid + 1]) {
                low = mid + 1;
            } else {
                high = mid;
            }
        }
        return low;
    }

解题思路

  • 初读题觉得这就是一道简单题,再看还是觉得这是一道简单题;
  • 方案一:遍历数组找到一个波峰(大于左右值)就能直接返回该下标,时间复杂度O(n);
  • 方案二:题目要求时间复杂度为O(logn),就是直接告诉你用二分查找法
    1)题目要求找到一个波峰返回就行,那题目就能理解为 给定数组为 仅有一个波峰的数组,通过二分查找找到该数组的最大值;
    2)如果中值比下一个值小,那么就代表波峰在中值之后,反之在中值之前,就是这样。没了
  • 👌
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容