Java | Leetcode Java题解之第162题寻找峰值

题目:

题解:

java 复制代码
class Solution {
    public int findPeakElement(int[] nums) {
        int n = nums.length;
        int left = 0, right = n - 1, ans = -1;
        while (left <= right) {
            int mid = (left + right) / 2;
            if (compare(nums, mid - 1, mid) < 0 && compare(nums, mid, mid + 1) > 0) {
                ans = mid;
                break;
            }
            if (compare(nums, mid, mid + 1) < 0) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        return ans;
    }

    // 辅助函数,输入下标 i,返回一个二元组 (0/1, nums[i])
    // 方便处理 nums[-1] 以及 nums[n] 的边界情况
    public int[] get(int[] nums, int idx) {
        if (idx == -1 || idx == nums.length) {
            return new int[]{0, 0};
        }
        return new int[]{1, nums[idx]};
    }

    public int compare(int[] nums, int idx1, int idx2) {
        int[] num1 = get(nums, idx1);
        int[] num2 = get(nums, idx2);
        if (num1[0] != num2[0]) {
            return num1[0] > num2[0] ? 1 : -1;
        }
        if (num1[1] == num2[1]) {
            return 0;
        }
        return num1[1] > num2[1] ? 1 : -1;
    }
}
相关推荐
学习编程的Kitty几秒前
JavaEE初阶——多线程(3)线程安全
java·开发语言·jvm
workflower2 小时前
微软PM的来历
java·开发语言·算法·microsoft·django·结对编程
江湖一码农2 小时前
[小白]spring boot接入emqx
java·数据库·spring boot
bbq粉刷匠4 小时前
从0开始学java--day6.5
java
im_AMBER5 小时前
Leetcode 38
笔记·学习·算法·leetcode
Slow菜鸟6 小时前
SpringBoot集成Elasticsearch | Elasticsearch 8.x专属Java Client
java·spring boot·elasticsearch
Miraitowa_cheems6 小时前
LeetCode算法日记 - Day 82: 环形子数组的最大和
java·数据结构·算法·leetcode·决策树·线性回归·深度优先
仰泳的熊猫7 小时前
LeetCode:698. 划分为k个相等的子集
数据结构·c++·算法·leetcode
豐儀麟阁贵7 小时前
4.5数组排序算法
java·开发语言·数据结构·算法·排序算法
Halo_tjn7 小时前
Java Map集合
java·开发语言·计算机