跳转至

GESP202412 三级 数字替换

题目分析

给定长度为 $n$ 的序列 $A$ 和一个整数 $k$, 需要将序列中所有大于 $k$ 的元素替换成序列的最大值, 所有小于 $k$ 的元素替换成序列的最小值, 等于 $k$ 的元素保持不变。


解题思路

  • 先遍历序列,找到序列的最大值 mx 和最小值 mn
  • 再遍历一次序列,根据每个元素与 $k$ 的大小关系替换:
  • 如果 a[i] > k,替换成 mx
  • 如果 a[i] < k,替换成 mn
  • 否则保持不变。

实现步骤

  • 初始化变量 mxmn
    • mx 设小一些,可以令 mx = -1e9 设为 $-10^9$。
    • 同理设 mn = 1e9 设为 $10^9$。设大一些。
  • 第一次遍历:分别求出 mxmn
  • 第二次遍历:根据元素 a[i] 的值与 $k$ 比较,进行替换;
  • 输出最终数组。

复杂度分析

  • 时间复杂度:$O(n)$,两次遍历数组;
  • 空间复杂度:$O(n)$,存储输入及输出序列。

总结

  • 本题主要考察数组遍历和条件判断;
  • 先确定最大值和最小值是关键;
  • 注意等于 $k$ 的元素不变;
  • 代码实现简单高效。