题解
2026-02-26 13:07:20
发布于:浙江
1阅读
0回复
0点赞
题目解析
- 输入输出:第一行输入两个正整数 (序列长度)和 (替换阈值)。第二行输入 个整数表示序列 。输出 个整数,表示按照规则替换后的序列。
- 数据范围:,。数据规模允许线性扫描算法。
- 复杂度要求:时间复杂度 ,需要两次线性扫描(一次求最值,一次替换);空间复杂度 存储原序列。
- 算法知识点:
线性扫描、最值查询、简单模拟
思路解析
- 读取数据:读入序列长度 、阈值 以及长度为 的整数序列。
- 预处理最值:使用
max_element和min_element分别找出序列中的最大值 和最小值 ,作为后续替换的目标值。 - 遍历替换:顺序扫描序列中的每个元素:
- 若当前元素 ,替换为 ;
- 若当前元素 ,替换为 ;
- 若当前元素 ,保持原值不变(隐含在逻辑中,不进入上述两个分支)。
- 输出结果:处理每个元素后立即输出(或存储后统一输出),保持原序列顺序。
完整代码
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 10;
int arr[MAXN];
int main() {
int n, k;
cin >> n >> k;
// 读入序列
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
// 关键步骤:找出序列中的最大值和最小值
int max_val = *max_element(arr, arr + n);
int min_val = *min_element(arr, arr + n);
// 遍历替换并输出
for (int i = 0; i < n; i++) {
if (arr[i] > k)
arr[i] = max_val; // 大于k替换为最大值
else if (arr[i] < k)
arr[i] = min_val; // 小于k替换为最小值
// 等于k时保持原值,不做处理
cout << arr[i] << " ";
}
return 0;
}
这里空空如也

有帮助,赞一个