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

    你可能感兴趣的文章
    Open××× for Linux搭建之二
    查看>>
    Open×××有线网络时使用正常,无线网络时使用报错的解决方案
    查看>>
    Opera Mobile Classic Emulator
    查看>>
    Operation not supported on read-only collection 的解决方法 - [Windows Phone开发技巧系列1]
    查看>>
    OperationResult
    查看>>
    Operations Manager 2007 R2系列之仪表板(多)视图
    查看>>
    operator new and delete
    查看>>
    operator new 与 operator delete
    查看>>
    operator() error
    查看>>
    OPPO K3在哪里打开USB调试模式的完美方法
    查看>>
    oppo后端16连问
    查看>>
    Optional类:避免NullPointerException
    查看>>
    Optional讲解
    查看>>
    ORA-00932: inconsistent datatypes: expected - got NCLOB【ORA-00932: 数据类型不一致: 应为 -, 但却获得 NCLOB 】【解决办法】
    查看>>
    ORA-00942 表或视图不存在
    查看>>
    ORA-01034: ORACLE not available
    查看>>
    ORA-01152: 文件 1 没有从过旧的备份中还原
    查看>>
    ORA-01207:文件比控制文件更新 - 旧的控制文件
    查看>>
    ORA-01795: 列表中的最大表达式数为 1000
    查看>>
    ORA-06575: 程序包或函数 NO_VM_DROP_PROC 处于无效状态
    查看>>