博客
关于我
C. Dominant Piranha(思维)
阅读量:265 次
发布时间:2019-03-01

本文共 1717 字,大约阅读时间需要 5 分钟。

如何判断一个序列中是否存在一个最大值的相邻元素比它小?

在这个问题中,我们需要判断一个序列中是否存在一个最大值的相邻元素比它小。如果满足这个条件,则输出这个最大值的位置;否则,输出-1。

关键思路

  • 寻找最大值:首先,我们需要遍历整个序列,找到其中最大的那个数。假设这个数位于位置 mx_pos

  • 检查相邻元素:接下来,我们需要检查这个最大值的位置 mx_pos 的前后元素是否存在一个比它小的数。

    • 如果 mx_pos 是第一个位置(即 i == 1),则我们需要检查它的后一个元素 a[2] 是否比它小。
    • 如果 mx_pos 是最后一个位置(即 i == n),则我们需要检查它的前一个元素 a[n-1] 是否比它小。
    • 如果 mx_pos 是中间的位置(即 i != 1i != n),则我们需要检查它的前一个元素 a[i-1] 和后一个元素 a[i+1] 是否有至少一个比它小。
  • 输出结果:如果上述条件满足,则输出 mx_pos;否则,输出 -1。

  • 代码逻辑解析

    #include 
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #define debug(a) cout << "#a" << " = " << a << endl;using namespace std;const int maxn = 3e5 + 100;typedef long long ll;ll a[maxn];int main(void) { cin.tie(0); std::ios::sync_with_stdio(false); ll t; cin >> t; while (t--) { ll n; cin >> n; for (ll i = 0; i <= n + 10; i++) a[i] = 0; for (ll i = 1; i <= n; i++) cin >> a[i]; ll mx = -1e18; for (ll i = 1; i <= n; i++) { if (a[i] > mx) { mx = a[i]; pos1 = i; } } ll sum = 0; pos1 = 0; for (ll i = 1; i <= n; i++) { if (mx == a[i]) { if (((i-1)>=1 && a[i-1] >= a[i]) && (i+1 <=n && a[i+1] >= a[i])) { // 说明两边都比它大,那么不满足条件 continue; } if (i == 1 && a[i] > a[i+1]) { pos1 = i; break; } if (i == n && a[i] > a[i-1]) { pos1 = i; break; } if ((i != 1 && a[i] > a[i-1]) || (i != n && a[i] > a[i+1])) { pos1 = i; break; } } } if (pos1 == 0) { cout << "-1"; } }}

    代码解释

  • 包含头文件:首先包括了必要的头文件,包括 iostreamvectorqueue 等。
  • 变量定义:定义了一个全局常量 maxn 用于存储最大序列长度,定义了一个数组 a 用于存储输入序列。
  • 输入处理:读取输入的测试用例数量 t,然后对于每个测试用例,读取序列的长度 n 和序列的值。
  • 寻找最大值:遍历序列,找到最大的那个数,并记录它的位置 mx_pos
  • 检查相邻元素:检查最大值的位置的前后元素是否有比它小的数。如果有,则记录位置 pos1 并跳出循环。
  • 输出结果:根据 pos1 的值输出结果。如果 pos1 未被设置为有效位置,则输出 -1。
  • 这个算法的时间复杂度为 O(n),适用于大规模数据的处理。

    转载地址:http://vwct.baihongyu.com/

    你可能感兴趣的文章
    mysqlbinlog报错unknown variable ‘default-character-set=utf8mb4‘
    查看>>
    mysqldump 参数--lock-tables浅析
    查看>>
    mysqldump 导出中文乱码
    查看>>
    mysqldump 导出数据库中每张表的前n条
    查看>>
    mysqldump: Got error: 1044: Access denied for user ‘xx’@’xx’ to database ‘xx’ when using LOCK TABLES
    查看>>
    Mysqldump参数大全(参数来源于mysql5.5.19源码)
    查看>>
    mysqldump备份时忽略某些表
    查看>>
    mysqldump实现数据备份及灾难恢复
    查看>>
    mysqldump数据库备份无法进行操作只能查询 --single-transaction
    查看>>
    mysqldump的一些用法
    查看>>
    mysqli
    查看>>
    MySQLIntegrityConstraintViolationException异常处理
    查看>>
    mysqlreport分析工具详解
    查看>>
    MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
    查看>>
    Mysql_Postgresql中_geometry数据操作_st_astext_GeomFromEWKT函数_在java中转换geometry的16进制数据---PostgreSQL工作笔记007
    查看>>
    mysql_real_connect 参数注意
    查看>>
    mysql_secure_installation初始化数据库报Access denied
    查看>>
    MySQL_西安11月销售昨日未上架的产品_20161212
    查看>>
    Mysql——深入浅出InnoDB底层原理
    查看>>
    MySQL“被动”性能优化汇总
    查看>>