1 条题解

  • 0
    @ 2026-10-18 18:33:46

    G3013 [GESP202412 三级] 数字替换 题解

    知识点:一维数组、最值、条件替换。

    解题思路

    先求原数组最小值lo和最大值hi,再遍历原数值:大于k替换成hi,小于k替换成lo,等于k保持不变。

    为什么正确

    极值在替换之前固定,逐个应用互斥比较分支与题目定义一致。

    易错点

    不能边改边重新求极值,否则结果可能依赖遍历顺序。

    复杂度

    时间O(n),空间O(n)。

    参考代码(C++17)

    #include<bits/stdc++.h>
    
    using namespace std;
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        int n,k;
        cin>>n>>k;
        vector<int>a(n);
        for(int &x:a)cin>>x;
        int lo=*min_element(a.begin(),a.end()),hi=*max_element(a.begin(),a.end());
        for(int x:a)cout<<(x>k?hi:x<k?lo:x)<<" ";
    }
    

    说明

    本题解为配套教学整理,非官方题解。复杂度按本页参考实现计算,题库使用6个自行生成的测试点。

    • 1

    信息

    ID
    681
    时间
    1000ms
    内存
    512MiB
    难度
    进阶
    标签
    递交数
    1
    已通过
    1
    上传者