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;
    }
}
相关推荐
逻辑驱动的ken2 分钟前
Java高频面试考点场景题11
java·深度学习·面试·职场和发展·高效学习
学习3人组16 分钟前
面向对象编程:反射(Reflection)原理与应用详解
java
斯维赤19 分钟前
每天学习一个小算法:快速排序
java·python·学习·算法·排序算法
天码-行空26 分钟前
深入拆解 Tomcat 系统架构:连接器如何设计
java·系统架构·tomcat
程序员牛奶27 分钟前
Project Loom:让 Java 高并发变得更简单
java·后端
NE_STOP29 分钟前
Redis--简介及配置文件详解
java
XiYang-DING35 分钟前
【Java EE】volatile关键字
java·单例模式·java-ee
im_AMBER44 分钟前
Leetcode 160 最小覆盖子串 | 串联所有单词的子串
开发语言·javascript·数据结构·算法·leetcode
A_aspectJ1 小时前
Java开发的学习优势:稳定基石与多元可能并存的技术赛道
java·开发语言
云烟成雨TD1 小时前
Spring AI Alibaba 1.x 系列【36】FlowAgent 和 BaseAgent 抽象类
java·人工智能·spring