#3800. 练3-清理魔法石阵

练3-清理魔法石阵

在宁静清晨的兔猫信奥学院里,魔法算法教室迎来了一道看似简单却充满挑战的题目。

🐾 加菲老师手里拿着一张魔法石阵的记录卷轴,上面记着一串神秘数字。他望着小兔小猫,说:

“孩子们,这是一条通往高阶魔法塔的石阵路径,但被一些**失效的魔力碎片(值为 00)**打乱了顺序。

你们的任务是——将所有 00 移动到数组的末尾,而非零元素的相对顺序必须保持不变

注意,整场施法过程必须在原地完成,不能使用新的数组;你们还要尽可能地减少操作次数。

最后,请告诉我你们保留下来的非零石的数量 kk,以及最终整理后的石阵顺序。”

🐇 小兔问:“那我们只能一边遍历一边移动吗?”

🐱 小猫点点头:“没错,不能多花空间,操作还得少,确实有点意思!”


输入格式

  • 第一行一个整数 nn,表示魔法石阵的长度。
  • 第二行 nn 个整数,表示魔法石阵当前的元素 nums[i]nums[i],可能为有效的能量(非零)或失效碎片(00)。

输出格式

  • 第一行输出一个整数 kk,表示最终保留下来的非零石数量。
  • 第二行输出调整后的完整石阵,前 kk 个为原本顺序的非零数字,剩下的位置全部补上 00

输入样例 1

5
0 1 0 3 12

输出样例 1

3
1 3 12 0 0

输入样例 2

1
0

输出样例 2

0
0

数据范围与进阶要求

  • 对于 100%100\% 的数据,满足:
    • 1n1041 \leq n \leq 10^4
    • 231nums[i]2311-2^{31} \leq \text{nums}[i] \leq 2^{31} - 1
  • 进阶目标:尽量减少对数组的写操作次数。

故事的最后,小兔和小猫默契地使用双指针策略,一边遍历一边清理石阵,很快就完成了加菲老师布置的任务。魔法塔的大门缓缓开启,他们又向高级算法魔法更进一步。

现在,轮到你来操控石阵啦,少年魔法师,你能比他们更快更巧吗?🌟🐇🐱