当前位置:网站首页>关于判断单峰数组的几种方法
关于判断单峰数组的几种方法
2022-08-10 08:46:00 【Aidan 347】
由题意可知若要保证对于数组A的所有排列有 f(a) <= f(b),就要保证A数组是最优排列,也就是A数组中只能出现一个峰,只有这样才可以贪心地选择 [l, r] 范围内的数进行操作。
所以由此想到了一些判断单峰数组的方法:
方法一:
类似于双指针:从数组两端开始,对于左边若 a[i]>=a[i-1] , 左指针 ++;
对于右边若 a[i-1]>=a[i] , 右指针 --;
到最后如果左指针 >= 右指针(出现 l>r 是因为可能出现一段平整的数),则一定为单峰数组;
int l = 1, r = n;
for (int i = 1; i < n;)
{
if (a[i + 1] >= a[i])
{
i++;
l = i;
}
else
break;
}
for (int i = n; i > 1;)
{
if (a[i - 1] >= a[i])
{
i--;
r = i;
}
else
break;
}
if (l >= r)
{
cout << "YES" << endl;
return;
}
else
{
cout << "NO" << endl;
return;
}
方法二:
用flag标记:(flag初始为false表示未出现峰) ,从前往后遍历数组,若出现 a[i] > a[i+1] 说明在i处已经出现过一个峰,此时将flag标记为true(表示出现过峰),在这之后如果出现 a[i] < a[i+1] 的上升状态,说明在这之后必然要再出现一个峰
bool flag = false;
for (int i = 1; i < n; i++)
{
if (!flag && a[i] > a[i + 1])
flag = true;
else if (flag && a[i] < a[i + 1])
{
cout << "NO" << endl;
return;
}
}
cout << "YES" << endl;
return;
方法三:
当然不是我想到的
Submission #167245781 - Codeforces
既然是单峰,那么只有一次连续上升的机会,所以计算从头开始的上升增量,最后判断上升增量是否等于最高的峰(若只有一个峰,就可以保证上升增量严格等于最高峰)
看到这个思路直接ORZ!!
for (int i=1;i<=n;i++)
{
cin>>a[i];
if (a[i]>a[i-1])
{
fa+=a[i]-a[i-1];
}
fb=max(fb,a[i]);
}
if (fa==fb) cout<<"YES\n";
else cout<<"NO\n";
边栏推荐
- 二叉树 --- 堆
- Obtain - 65 [chances] : "soldiers, subtlety also - 7-36 meter reading - defeat
- iwemeta metaverse: Ali's first COO: how to build a sales force
- iwemeta元宇宙:一个娃娃卖9999元,泡泡玛特认为一点也不贵
- Hugo NexT主题升级记录
- Guys, may I ask, the oraclecdc error report is not serialized, but I see that the source code does not inherit serialization, what is the reason?
- 1499. 满足不等式的最大值 堆/双端队列
- Delphi实现的一个文件在线查询显示下载功能
- Linux下载安装MySql
- 怎么使用【jmeter正则表达式提取器】解决返回值作参数的问题
猜你喜欢
CV+Deep Learning - network architecture Pytorch recurrence series - classification (3: MobileNet, ShuffleNet)
day16--The use of the packet capture tool Charles
二叉树 --- 堆
Spotify expresses its architectural design using the C4 model
不要把公司当成家,被通知裁员时会变得不幸...
Rust学习:6.1_复合类型之切片
[OAuth2] 20. OAuth2 Extended Protocol PKCE
TensorFlow 2.9的零零碎碎(一)
ARM结构体系3:ARM指令的寻址和异常中断处理
ARM Architecture 2: Processor Core and Assembly Instruction Set
随机推荐
VMware ESX Server常用命令行
debezium-connector-mysql拉起docker报错:debezium启动docke
【OAuth2】十九、OpenID Connect 动态客户端注册
The implementation of the seemingly useless component (text gradient) in NaiveUI is so simple
J9 Number Theory: Macro Analysis of DAO Characteristics
2022-08-01 网工进阶(二十三) VLAN高级技术-VLAN聚合、MUX VLAN
[OAuth2] Nineteen, OpenID Connect dynamic client registration
Obtain - 65 [chances] : "soldiers, subtlety also - 7-36 meter reading - defeat
大佬们,请问一下,oraclecdc报错没有序列化,可是我看源码中的确是没有继承序列化的,是什么原因
day16--The use of the packet capture tool Charles
DAY26:GetShell专题
11111
iwemeta元宇宙:一个娃娃卖9999元,泡泡玛特认为一点也不贵
菜鸟、小白在autojs和冰狐智能辅助之间如何选择?
phpstudy开机自启
Is the write performance of raid5 faster than raid10?
基于sklearn的决策树应用实战
SQL SERVER 数据库,表的数据发生增删改,该表的索引会在ldf日志中记录吗?
[深入研究4G/5G/6G专题-56]: L3信令控制-5-无线承载管理
硬件工程师90天学习资料及笔记汇总