博客
关于我
Remove Extra one 维护前缀最大最小值
阅读量:575 次
发布时间:2019-03-11

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

为了解决问题,我们需要找到一个数,使得在去除它之后,前缀的最后一个数尽可能大,且这样的最大值出现的次数最多。以下是解决方案的详细分析和优化步骤:

问题分析

我们需要从数组中去除一个数,使得在删除后的数组中,每个前缀的最后一个数的最大值出现的次数尽可能多。这个问题可以通过动态处理每个元素,以及维护当前最大值和次大值来解决。

方法思路

我们可以用一个辅助数组记录每个元素被选中作为前缀最大值的次数。通过扫描数组,维护当前最大值和次大值:

  • 初始化两个变量max_valsecond_max分别记录当前数组的最大值和次大值。
  • 遍历数组中的每个元素:
    • 如果当前元素大于max_val,则更新max_val并记录次大值为原max_val,然后在辅助数组中标记当前元素的最大值出现次数。
    • 如果当前元素大于second_max,则在辅助数组中标记原max_val的次数增加次,更新次大值为当前元素。
  • 找到辅助数组中最大值对应的元素,此时最大值出现的次数最多。
  • 代码实现

    #include 
    using namespace std;const int mod = 1e9 + 7;int n;int max_val = -1e9;int second_max = -1e9;int a[100010]; // 用于记录每个元素被选中作为max_val的次数int main() { cin >> n; for (int i = 1; i <= n; i++) { int x; cin >> x; if (x > max_val) { second_max = max_val; max_val = x; a[x] = -1; // 将该元素设为-1,表示去掉它后前缀可能会受到影响 } else if (x > second_max) { a[max_val] += 1; // 将原来的max_val的影响次数+1 second_max = x; } } int max_count = -1e9; int result = -1; for (int i = 1; i <= n; i++) { if (a[i] > max_count) { max_count = a[i]; result = i; } } cout << result << endl; return 0;}

    代码解释

  • 初始化变量max_valsecond_max初始化为-1e9,用来记录当前数组的最大值和次大值。
  • 遍历元素:每个元素x被读取后,根据x的大小与max_valsecond_max比较,更新最大值和次大值,并根据需要更新辅助数组。
  • 记录最大值次数:辅助数组a用于记录每个元素被选中作为前缀最大值的次数。
  • 找出结果:遍历辅助数组,找到值最大的元素及其对应的最大前缀数目,这个元素就是要去掉的元素。
  • 该方法通过一次扫描数组,保证时间复杂度为O(n),能够高效解决问题。

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

    你可能感兴趣的文章
    一文带你详细介绍c++中的std::move函数
    查看>>
    面试官:“看你简历上写熟悉 Handler 机制,那聊聊 IdleHandler 吧?”
    查看>>
    Android音视频开发之——音频非压缩编码和压缩编码
    查看>>
    linux学习笔记(四)基本用户管理与帮助命令
    查看>>
    golang 第四课 结构体(struct)、interface{}、方法(func)详解
    查看>>
    element 侧菜单选中默认选中,及事件,分组
    查看>>
    小程序:防止父方法被子方法冒泡,使用catchtap
    查看>>
    PHP:php 上传文件大小控制配置文件中设置的
    查看>>
    TP路由地址叠加
    查看>>
    'ls' 不是内部或外部命令
    查看>>
    解决框架报错不明显:使用try和catch是关键
    查看>>
    正则验证:element添加动态正则验证
    查看>>
    vue报错 created hook错误
    查看>>
    Think PHP 学习笔记 10.查询方式实例演示
    查看>>
    JS 瀑布流效果
    查看>>
    单选框点击文字也能选中
    查看>>
    MySQL Can't connect to MySql server on 'localhost'
    查看>>
    使用Field II进行超声波束形成的设计仿真
    查看>>
    制作声场GIF动画
    查看>>
    此主机支持Intel VT-x,但Intel VT-x 处于禁用状态。
    查看>>