当前位置:网站首页>342 · 山谷序列
342 · 山谷序列
2022-07-30 07:53:00 【yinhua405】
描述
给你一个长度为nn的序列,在他的子序列中让你找一个山谷序列,山谷序列定义为:
- 序列的长度为偶数。
- 假设子序列的长度为2n2n。则前nn个数是严格递减的,后nn个数是严格递增的,并且第一段的最后一个元素和第二段的第一个元素相同,也是这段序列中的最小值。
现在想让你找所有子序列中满足山谷序列规则的最长的长度为多少?
背完这套刷题模板,真的不一样!
北大学霸令狐冲15年刷题经验总结的《算法小抄模板Cheat Sheet》助你上岸!
微信添加【jiuzhang0607】备注【小抄】领取
- 1<=len(num)<=10001<=len(num)<=1000
- 1<=num[i]<=100001<=num[i]<=10000
样例
样例 1:
输入: num = [5,4,3,2,1,2,3,4,5]
输出: 8
样例解释:
最长山谷序列为[5,4,3,2,2,3,4,5]
样例 2:
输入: num = [1,2,3,4,5]
输出: 0
样例解释:
不存在山谷序列
int valley(vector<int> &num) {
// write your code here
// write your code here
int size = num.size();
int left = 0;
int right = size - 1;
vector<int>dpleft(size, 0);
vector<int>dpright(size, 0);
map<int, set<int>> mapSet; //num[i],i
int leftMax = 0;
int rightMax = 0;
mapSet[num[left]] = set<int>{ 0};
//从左到右统计递减数量
for (int left = 1; left < size; left++)
{
auto it = mapSet.find(num[left]);
if (it != mapSet.end())
{
it->second.insert(left);
}
else
{
mapSet[num[left]] = set<int>{ left };
}
for (int i = left - 1; i >= 0; i--)
{
if (num[left] < num[i])
{
dpleft[left] = max(dpleft[left], dpleft[i] + 1);
if (dpleft[left] > leftMax)
{
leftMax = dpleft[left];
}
}
}
}
//从右到左统计递减数量
for (int right = size - 2; right >= 0; right--)
{
for (int j = right + 1; j < size; j++)
{
if (num[right] < num[j])
{
dpright[right] = max(dpright[right], dpright[j] + 1);
if (dpright[left] > rightMax)
{
rightMax = dpright[left];
}
}
}
}
int maxRet = 0;
for (int i = 0; i < size; i++)
{
if (mapSet[num[i]].size() <= 1)
{
continue;
}
set<int> tmp = mapSet[num[i]];
for (auto it : tmp)
{
if (it <= i)
{
continue;
}
int minTmp = min(dpleft[i], dpright[it]) +1;
if (minTmp > maxRet)
{
maxRet = minTmp;
}
}
}
return maxRet*2;
}
边栏推荐
猜你喜欢

如何组装一个注册中心

One article to understand twenty kinds of switching power supply topologies

RFID固定资产盘点系统给企业带来哪些便利?

剖析SGI STL空间配置器(一 、辅助接口函数)

typescript7-typescript common types

一文读懂二十种开关电源拓扑结构

【蓝桥杯选拔赛真题45】Scratch猫鼠游戏 少儿编程scratch蓝桥杯选拔赛真题讲解

SEER数据库中“手术变量(RX SUMM-SURG OTH REG/DIS )”下的字段解释

Flutter 环境变量配置和flutter doctor中的错误解决

ACL 2022 | 引入角度margin构建对比学习目标,增强文本语义判别能力
随机推荐
C语言力扣第46题之全排列。回溯法
SRAM与DRAM的区别
js currying
最远点采样 — D-FPS与F-FPS
OA Project Pending Meeting & History Meeting & All Meetings
Gorm 更新零值问题
ACL 2022 | 引入角度margin构建对比学习目标,增强文本语义判别能力
开创ETC生态建设新格局 JASMINER新一批X4服务器陆续发出
SQL的substring_index()用法——MySQL字符串截取
剑指offer 48:最长不重复子串
test3
typescript8-类型注解
万字详解:C语言三子棋进阶 + N子棋递归动态判断输赢(另附课设大作业参考)
【sleuth + zipkin 服务链路追踪】
MongoDB - 千万级数据脚本过滤笔记
注解开发相关
一文带你玩转offer-01
SQL injection vulnerability (postgresql injection)
elk报错:[syslogs] index has exceeded [1000000]
【SQL server速成之路】——身份验证及建立和管理用户账户