博客
关于我
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/

    你可能感兴趣的文章
    MySQL、Redis高频面试题汇总
    查看>>
    MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
    查看>>
    mysql一个字段为空时使用另一个字段排序
    查看>>
    MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
    查看>>
    MYSQL一直显示正在启动
    查看>>
    MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
    查看>>
    MySQL万字总结!超详细!
    查看>>
    Mysql下载以及安装(新手入门,超详细)
    查看>>
    MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
    查看>>
    MySQL不同字符集及排序规则详解:业务场景下的最佳选
    查看>>
    Mysql不同官方版本对比
    查看>>
    MySQL与Informix数据库中的同义表创建:深入解析与比较
    查看>>
    mysql与mem_细说 MySQL 之 MEM_ROOT
    查看>>
    MySQL与Oracle的数据迁移注意事项,另附转换工具链接
    查看>>
    mysql丢失更新问题
    查看>>
    MySQL两千万数据优化&迁移
    查看>>
    MySql中 delimiter 详解
    查看>>
    MYSQL中 find_in_set() 函数用法详解
    查看>>
    MySQL中auto_increment有什么作用?(IT枫斗者)
    查看>>
    MySQL中B+Tree索引原理
    查看>>