`

Leetcode - Find Peak Element

 
阅读更多
[分析] 暴力法,按序扫描数组,找到peak element。提示说复杂度可以是logN级别的,那就要二分查找了,如何进行二分呢?考察nums[mid]和其左右相邻元素:若nums[mid] < nums[mid + 1], 则右侧必存在一个局部最大值,简略证明:若右侧一直是升序,则最后一个元素是peak element, 否则,第一次升序的波峰处是一个peak element。同理,若num[mid] < nums[mid - 1], 则左侧必存在一个局部最大值。若前面两种情况都不成立,则mid处就是一个局部最大值。

public class Solution {
    public int findPeakElement1(int[] nums) {
        if (nums == null || nums.length == 0)
            return -1;
        if (nums.length == 1)
            return 0;
        int N = nums.length;
        for (int i = 1; i < N - 1; i++) {
            if (nums[i] > nums[i - 1] && nums[i] > nums[i + 1])
                return i;
        }
        if (nums[0] > nums[1])
            return 0;
        else if (nums[N - 1] > nums[N - 2])
            return N - 1;
        else
            return -1;
    }
    
    public int findPeakElement(int[] nums) {
        if (nums == null || nums.length == 0)
            return -1;
        if (nums.length == 1 || nums[0] > nums[1])
            return 0;
        int N = nums.length;
        int left = 0, right = N - 1;
        while (right >= left) {
            if (left == right)
                return left;
            int mid = left + (right - left) / 2;
            if (nums[mid] < nums[mid + 1]) 
                left = mid + 1;
            else if (nums[mid] < nums[mid - 1])
                right = mid - 1;
            else
                return mid;
        }
        return -1;
    }
}
分享到:
评论

相关推荐

    js-leetcode题解之162-find-peak-element.js

    javascript js_leetcode题解之162-find-peak-element.js

    python-leetcode题解之162-Find-Peak-Element.py

    python python_leetcode题解之162_Find_Peak_Element.py

    java-leetcode题解之Find Peak Element.java

    java java_leetcode题解之Find Peak Element

    算法-leetcode-剑指offer上的题很多

    - **查找峰值元素(Find Peak Element)**: 在一个无序数组中找到任意一个局部最大值。 - **在旋转排序数组中搜索/Search in Rotated Sorted Array**: 在一个被旋转过的排序数组中搜索给定数字。 - **在旋转排序数组中...

    javalruleetcode-leetcode-python:leetcode问题的Python解决方案

    leetcode 刷题笔记 记录一些刷题细节,很惭愧只做了一点微小的工作 4.13 162题. Find Peak Element.Binary search,需要比较nums[mid]和nums[mid+1]. 4.12 212题. Word Search II. 用trie tree存word list,然后dfs. ...

    gasstationleetcode-Leetcode:力码

    Leetcode\find重复的数字(287).swift Leetcode\friend circles(547).swift Leetcode\gas station(134)。 swift Leetcode\group anagrams(49).swift Leetcode\group 给定他们所属的组大小的人(1282).swift Leetcode\...

    lrucacheleetcode-leetcode:个人刷leetcode遇到的一些题汇总(golang)

    next-greater-element-ii serialize-and-deserialize-binary-tree subarray-sum-equals-k binary-tree-preorder-traversal n-queens-ii populating-next-right-pointers-in-each-node sum-root-to-leaf-numbers best...

    算法刷题笔记leetcode/lintcode

    - Find Peak Element(寻找峰值元素) - Search in Rotated Sorted Array(在旋转排序数组中搜索) - Search in Rotated Sorted Array II(在旋转排序数组中搜索II) - Find Minimum in Rotated Sorted Array...

    leetcode分类-interview:面试基础算法

    leetcode 分类 :person_running::person_running::person_running: 算法 :person_running::person_running::person_running:‍ 实践&理论 :books: :ear: :television: Binary Search(二分查找) easy 69: 278: 35: ...

    LeetCode C++全解

    1. Introduction 2. Array i. Remove Element ii. Remove Duplicates from Sorted Array iii....iv....v....vi....vii. Find Minimum in Rotated Sorted Array viii....ix....x....xi....xii....xiii....xiv. Find Peak Element

    lrucacheleetcode-Coding-Interview:编程面试

    lru cache leetcode Coding-Interview ...Peak Element First Bad Version Valid Perfect Square 二叉树查找/BST查找 Closest Binary Search Tree Value 二叉树查找/二叉树第K个 Kth Smallest Element In A

    2018年最新Google Onsite面经总结1

    从标题和描述中可以看到,本文主要关注于LeetCode原题的总结,涵盖了162个题目,包括Find Peak Element、Isomorphic Strings、Group Shifted Strings等,这些题目都是Google Onsite面经中的常见题目。 下面将对这些...

    LeetCode练习答案

    - **寻找峰值元素(Find Peak Element)**: 给定一个未排序的数组,找到一个“峰值”元素,即其值大于相邻元素。 ##### 位操作(Bit Manipulation) - **缺失数字(Missing Number)**: 给定一个包含[0, n]范围内所有...

    算法学习笔记

    - Find Peak Element:在一个整数数组中找到一个峰值元素。 - Median of Two Sorted Arrays:两个排序数组的中位数。 - Sqrt(x):计算并返回x的平方根。 - Wood Cut:木材切割问题,给定木材长度,求可以切出的最大...

Global site tag (gtag.js) - Google Analytics