思路
做了前置题,一个很显然的做法是正反扫两遍,第一遍正着扫,把0放到数组前缀。 第二遍反着扫,把2放到数组后缀。
这里我们用一个动画来为大家演示👇
现有 n 个元素排成的数组 nums,每个元素都表示一种颜色:红色为 0,白色为 1,蓝色为 2。你需要直接在数组 nums 上重新排列这些元素,使得所有相同颜色的元素靠在一起,并且整体呈现红色、白色、蓝色的先后顺序。
注意,不允许调用语言内置或标准库中的排序函数来完成这一整理过程。
约束条件:
0、1 或 2。输入包含一个参数:
nums:一个整数列表,表示待整理的数组,其中 0、1、2 分别对应红色、白色和蓝色。返回整理后的整数列表 nums,其中元素按 0、1、2 的顺序排列。
输入
1
2
输出
2
说明
数组长度 n=1,整个数组只有一个元素 2。
由于单独一个元素天然满足红色、白色、蓝色的顺序要求,不需要任何移动,结果为 2。
输入
5
2 2 0 1 2
输出
0 1 2 2 2
说明
数组中红色元素 0 有 1 个,白色元素 1 有 1 个,蓝色元素 2 有 3 个。
按照红色、白色、蓝色的顺序排列后,所有 0 在最前,接着是 1,最后是所有 2,因此结果为 0 1 2 2 2。
输入
4
1 0 1 0
输出
0 0 1 1
说明
数组中有 2 个红色元素 0 和 2 个白色元素 1,没有蓝色元素 2。
按照颜色顺序排列后,所有 0 在前,所有 1 在后,因此输出为 0 0 1 1。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册