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

本文共 1723 字,大约阅读时间需要 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/

    你可能感兴趣的文章
    Objective-C实现MinHeap最小堆算法(附完整源码)
    查看>>
    Objective-C实现minimum cut最小切割流算法(附完整源码)
    查看>>
    Objective-C实现minimum partition最小分区算法(附完整源码)
    查看>>
    Objective-C实现Minimum Vertex Cover最小顶点覆盖算法(附完整源码)
    查看>>
    Objective-C实现MSRCR算法(附完整源码)
    查看>>
    Objective-C实现multilayer perceptron classifier多层感知器分类器算法(附完整源码)
    查看>>
    Objective-C实现multiplesThreeAndFive三或五倍数的算法 (附完整源码)
    查看>>
    Objective-C实现n body simulationn体模拟算法(附完整源码)
    查看>>
    Objective-C实现naive string search字符串搜索算法(附完整源码)
    查看>>
    Objective-C实现natural sort自然排序算法(附完整源码)
    查看>>
    Objective-C实现nested brackets嵌套括号算法(附完整源码)
    查看>>
    Objective-C实现nevilles method多项式插值算法(附完整源码)
    查看>>
    Objective-C实现newtons second law of motion牛顿第二运动定律算法(附完整源码)
    查看>>
    Objective-C实现newton_forward_interpolation牛顿前插算法(附完整源码)
    查看>>
    Objective-C实现newton_raphson牛顿拉夫森算法(附完整源码)
    查看>>
    Objective-C实现NLP中文分词(附完整源码)
    查看>>
    Objective-C实现NLP中文分词(附完整源码)
    查看>>
    Objective-C实现NMS非极大值抑制(附完整源码)
    查看>>
    Objective-C实现not gate非门算法(附完整源码)
    查看>>
    Objective-C实现number of digits解字符数算法(附完整源码)
    查看>>