大厂面试真题详解:山脉序列中的最大值

简介: 大厂面试真题详解:山脉序列中的最大值

给 n 个整数的山脉数组,即先增后减的序列,找到山顶(最大值)

  • 数组严格递增,严格递减

在线评测地址:领扣题库官网

例1:

输入: nums = [1, 2, 4, 8, 6, 3] 
输出: 8

例2:

输入: nums = [10, 9, 8, 7], 
输出: 10

算法:二分

算法思路

  • 由于本题数据是具有部分单调性,我们可以考虑用二分法来解决
  • 并且本题保证数组严格递增或严格递减,所以相邻两个数必不相等
  • 我们可以通过a[mid]和a[mid+1]的大小关系来判断mid是在左侧还是右侧

代码思路

  1. 设置左边界等于0,右边界等于numsLen - 1
  2. 对于mid所指向的数,若nums[mid] > nums[mid + 1]则表示mid指向的数在最大值右侧或最大值,那么right = mid,否则left = mid
  3. 不断重复 2 直到 left + 1 == right 退出
  4. left和right指向的数中较大的一个即最大值,将其返回

复杂度分析

N表示数组nums长度

  • 空间复杂度:O(N)
  • 时间复杂度:O(logN)
public class Solution {
    /**
     * @param nums: a mountain sequence which increase firstly and then decrease
     * @return: then mountain top
     */

    public int mountainSequence(int[] nums) {
        if (nums == null || nums.length == 0) {
            return 0;
        }
        int left = 0;
        int right = nums.length - 1;
        while (left + 1 < right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] > nums[mid + 1]) {
                right = mid;
            } else {
                left = mid;
            }
        }
        return Math.max(nums[left], nums[right]);
    }
}

更多题解参考:九章官网solution

相关文章
|
机器学习/深度学习 人工智能 自动驾驶
强化学习从基础到进阶--案例与实践含面试必知必答[10]:模仿学习、行为克隆、逆强化学习、第三人称视角模仿学习、序列生成和聊天机器人
强化学习从基础到进阶--案例与实践含面试必知必答[10]:模仿学习、行为克隆、逆强化学习、第三人称视角模仿学习、序列生成和聊天机器人
强化学习从基础到进阶--案例与实践含面试必知必答[10]:模仿学习、行为克隆、逆强化学习、第三人称视角模仿学习、序列生成和聊天机器人
【牛客面试必刷TOP101】有效括号序列、滑动窗口的最大值
【牛客面试必刷TOP101】有效括号序列、滑动窗口的最大值
|
C++
剑指Offer - 面试题7:重构二叉树 (力扣 - 105、从前序与中序遍历序列构造二叉树)
剑指Offer - 面试题7:重构二叉树 (力扣 - 105、从前序与中序遍历序列构造二叉树)
77 0
|
机器学习/深度学习 人工智能 算法
强化学习从基础到进阶-常见问题和面试必知必答[1]:强化学习概述、序列决策、动作空间定义、策略价值函数、探索与利用、Gym强化学习实验
强化学习从基础到进阶-常见问题和面试必知必答[1]:强化学习概述、序列决策、动作空间定义、策略价值函数、探索与利用、Gym强化学习实验
Leecode 面试题57 - II. 和为s的连续正数序列
Leecode 面试题57 - II. 和为s的连续正数序列
62 0
|
Serverless C语言 索引
华为面试C语言真题(二)
华为面试C语言真题( 二)
333 1
华为面试C语言真题(二)
|
JavaScript Go
剑指Offer面试题57 - II. 和为s的连续正数序列
剑指Offer面试题57 - II. 和为s的连续正数序列
剑指Offer面试题57 - II. 和为s的连续正数序列
|
安全 测试技术 Python
软件测试面试题及答案,这个题库有3千多道最新面试真题可以刷
相信对于很多软件测试新手来说,技术项目的面试是十分让人头疼的,生怕没回答得好,就会跟这个offer失之交臂
228 0
|
设计模式 缓存 算法
腾讯Java高级岗180道面试真题,面试大厂拿45Koffer没问题!
一、数据结构与算法基础 · 说一下几种常见的排序算法和分别的复杂度。 · 用Java写一个冒泡排序算法 · 描述一下链式存储结构。 · 如何遍历一棵二叉树? · 倒排一个LinkedList。 · 用Java写一个递归遍历目录下面的所有文件
|
存储
经典面试题:给两个序列如何构造一棵二叉树
在面试的过程中,我们经常会遇到一些数据结构相关的问题,很多经典问题百问不烂。而数据结构的问题中排序、链表、二叉树等问题又是经久不衰,这不,今天就分享一道关于经典的问题:给定两个序列如何构造一颗二叉树。
182 0
经典面试题:给两个序列如何构造一棵二叉树