LeetCode 0162 Find Peak Element

2022/5/27 23:22:12

本文主要是介绍LeetCode 0162 Find Peak Element,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

原题传送门

1. 题目描述

2. Solution 1

1、思路分析
爬坡法:“人往高处走,水往低处流”。如果从一个位置开始,不断的向高处走,那么最终一定可以到达一个峰值位置。为了加快查找速度,使用二分查找。

2、代码实现

package Q0199.Q0162FindPeakElement;

/*
   Binary Search: iteration
 */
public class Solution1 {

    public int findPeakElement(int[] nums) {
        int low = 0;
        int high = nums.length - 1;

        while (low < high) {
            int mid1 = low + (high - low) / 2;
            int mid2 = mid1 + 1;
            if (nums[mid1] < nums[mid2]) low = mid2;
            else high = mid1;
        }
        return low;
    }
}

3、复杂度分析
时间复杂度: O(log n)
空间复杂度: O(1)

3. Solution 2

1、思路分析
Solution 1的迭代实现
2、代码实现

package Q0199.Q0162FindPeakElement;

public class Solution2 {
    /*
      Binary Search: recursion
    */
    public int findPeakElement(int[] nums) {
        return helper(nums, 0, nums.length - 1);
    }

    private int helper(int[] nums, int low, int high) {
        if (low == high) return low;
        else {
            int mid1 = low + (high - low) / 2;
            int mid2 = mid1 + 1;
            if (nums[mid1] > nums[mid2]) return helper(nums, low, mid1);
            else return helper(nums, mid2, high);
        }
    }
}

3、复杂度分析
时间复杂度: O(log n)
空间复杂度: O(log n)



这篇关于LeetCode 0162 Find Peak Element的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程