算法笔试模拟题精解之“连绵的群山”

简介: 可以将山化分为几个小连续区间,每个区间保证越来越高,并且保证每个区间尽可能的长。除第一个和最后一个区间,中间的其余区间,有移除可能的是每个区间的最小值和最大值,第一个区间有移除可能的是最小值,最后一个区间有移除可能的是最大值。这样才能找出最长的山的区间。

在线编程介绍

阿里云开发者社区在线编程产品,针对广大开发者学习、实践、面试、应聘、考试认证等打造的免费在线刷题神器。题库来自笔试模拟题、算法大赛模拟题等,界面整洁明了,操作简单,为用户营造专心答题的学习环境。点击链接开始体验:https://developer.aliyun.com/coding

本文为大家介绍其中的 第79题:连绵的群山 的题目解析,具体如下:

题目描述

等级:中等
知识点:DP

查看题目:连绵的群山
小森家的北面有一条连绵的山脉,山脉高低起伏。小森很好奇这些山中最多有几座连续的山头是越来越高的,当然这对小森来说太简单了。

他又想,假如可以移除其中一座,这个答案最大又会是多少?当然了,他也可以选择不移除任何一座山峰。1 <= n <= 100000, 1 <= a[i] <= 1000000000。

输入内容为两行,第一行为山峰的数量n,第二行为n个数字,表示每个山头的高度。

输出一个数字,表示最大值。
示例1
输入:
5
[5,10,6,7,8]
输出:
4
注意
可以去掉10,形成数组[5, 6, 7, 8],长度为 3 。

解题思路:

大致思路:可以将山化分为几个小连续区间,每个区间保证越来越高,并且保证每个区间尽可能的长。除第一个和最后一个区间,中间的其余区间,有移除可能的是每个区间的最小值和最大值,第一个区间有移除可能的是最小值,最后一个区间有移除可能的是最大值。这样才能找出最长的山的区间。

具体过程:初始化两个数组,oneIndex和arr,arr保存当前增区间的长度,oneIndex保存arr中数组元素为1的索引位置,对于[5,10,6,7,8]例子,arr={1,2,1,2,3}(5,10递增,6,7,8为一个增区间),oneIndex={0, 2}(因为arr[0]=1,arr[2]=1)。这下明白这两个数组的含义了吧。
接下来遍历oneIndex区间,也就是找出arr中所有为1的值的索引(arr数组的存在可以不用遍历arr找1的位置,而是可以直接定位,用空间换时间)
所有为1的值的索引的元素(除第一个1)和其前面的那个元素都有移除的嫌疑,移除后计算长度。
先移除1前面那座山,也就是上一个区间最高的山

if(a[oneIndex[i]-2]<=a[oneIndex[i]])  
ans=Math.max(arr[oneIndex[i+1]-1]+arr[oneIndex[i]-2],ans);

Else ans=Math.max(arr[oneIndex[i]-1],ans);
再移除1这座山,也就是当前区间最低的山(有同学可以不明白为什么最低的山也有移除的可能性,看看下面的例子)
可能出现这种情况

2,4,5,6,3,8,9,11,13,15

这样的话,即使3是第二个区间中最小的,也应该移除,因为这个区间的其他数字都很大,而且可以和前面的区间对接上。

if(oneIndex[i]+1<n) {
  if(a[oneIndex[i]-1]<=a[oneIndex[i]+1])
    ans=Math.max(arr[oneIndex[i+1]-1]+arr[oneIndex[i]-1]-1,ans);
  Else ans=Math.max(arr[oneIndex[i]-1],ans);
 }

看完之后是不是有了想法了呢,快来练练手吧>>查看题目:连绵的群山

720-150.png

相关文章
|
6月前
|
算法 搜索推荐 Java
Java数据结构 -- 常见算法分析(查找算法、排序算法)精解详解!!!
Java数据结构 -- 常见算法分析(查找算法、排序算法)精解详解!!!
61 0
|
6月前
|
编解码 算法 前端开发
往年 | 大疆雷达算法校招笔试题目解析
往年 | 大疆雷达算法校招笔试题目解析
486 1
|
算法
压缩算法 【腾讯2020校园招聘-后台&综合-第一次笔试 】
压缩算法 【腾讯2020校园招聘-后台&综合-第一次笔试 】
86 0
|
算法 网络协议
骚戴独家笔试---算法篇4
骚戴独家笔试---算法篇4
64 1
|
存储 算法
骚戴独家笔试---算法篇3
骚戴独家笔试---算法篇3
203 0
骚戴独家笔试---算法篇3
|
搜索推荐
7大排序算法-- 堆排 快速排序 --精解(下)
7大排序算法-- 堆排 快速排序 --精解(下)
85 0
|
搜索推荐
7大排序算法-- 堆排 快速排序 --精解(上)
7大排序算法-- 堆排 快速排序 --精解
52 0
|
搜索推荐 算法
7大排序算法-- 直接插入,希尔,冒泡,选择 --精解(下)
7大排序算法-- 直接插入,希尔,冒泡,选择 --精解(下)
130 0
|
存储 搜索推荐
7大排序算法-- 直接插入,希尔,冒泡,选择 --精解(上)
7大排序算法-- 直接插入,希尔,冒泡,选择 --精解
84 0
|
算法 Serverless 测试技术
骚戴独家笔试---算法篇5
骚戴独家笔试---算法篇5
58 0
下一篇
无影云桌面