当前位置:网站首页>关于判断单峰数组的几种方法
关于判断单峰数组的几种方法
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";边栏推荐
- Class Notes (7) (1) - #647. Find the root and the child (root)
- PTA 习题2.2 数组循环左移
- ARM Architecture 3: Addressing and Exception Handling of ARM Instructions
- 1-31部 1-31套 和硬件工程师90天学习资料及笔记汇总
- 【OAuth2】二十、OAuth2扩展协议 PKCE
- [机缘参悟-65]:《兵者,诡道也》-7-三十六计解读-败战计
- raid5的写性能,是不的比raid10快一些?
- 问下cdc mysql to doris.不显示具体行数,怎么办?
- 【Unity入门计划】2D游戏实现敌人来回移动控制脚本
- 【搜索引擎】Solr:提高批量索引的性能
猜你喜欢

2022-08-01 网工进阶(二十三) VLAN高级技术-VLAN聚合、MUX VLAN

TensorFlow 2.9的零零碎碎(一)

DAY25:逻辑漏洞

MySQL的用户临时表与内部临时表

协同工具满足70%-90%的工作需求,成为企业香饽饽

【OAuth2】二十、OAuth2扩展协议 PKCE

不要把公司当成家,被通知裁员时会变得不幸...

如何远程调试对方的H5页面

ShardingSphere入门

I don't want to do accounting anymore, Die changed to a new one, moved forward bravely, and finally successfully passed the career change test to double his monthly salary~
随机推荐
数据库注入提权总结(一)
Rust learning: 6.3_ Tuples of composite types
PTA Exercise 2.1 Simple Calculator
Rust learning: 6.5_Array of composite types
第十六天&charles的基本操作
刷题工具h
Spotify使用C4模型表达其架构设计
不想再干会计了,蝶变向新,勇往直前,最后成功通过转行测试实现月薪翻倍~
明明加了唯一索引,为什么还是产生重复数据?
Is the write performance of raid5 faster than raid10?
mySQL增删改查进阶
Rust learning: 6.4_ enumeration of composite types
硬件工程师90天学习资料及笔记汇总20220730
nrm 使用详解
本地生活商家如何通过短视频赛道,提升销量曝光量?
00后女孩月薪3200,3年买两套房,这个程序员变现新风口千万要把握住
Ask next CDC mysql to Doris. Don't show the specific number of lines, how to do?
【微服务架构】为故障设计微服务架构
【API架构】使用 JSON API 的好处
短视频同城流量宣传小魔推有何优势?如何给实体商家带来销量?