给定一个包含红色、白色和蓝色、共 n
个元素的数组 nums
,原地
对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
我们使用整数 0
、 1
和 2
分别表示红色、白色和蓝色。
必须在不使用库内置的 sort 函数的情况下解决这个问题。
输入:
nums = [2,0,2,1,1,0]
输出:
[0,0,1,1,2,2]
输入:
nums = [2,0,1]
输出:
[0,1,2]
impl Solution {
pub fn sort_colors(nums: &mut Vec<i32>) {
let (mut i, mut l, mut r) = (0, 0, nums.len() - 1);
while i <= r {
if nums[i] < 1 {
if i == l {
i += 1;
} else {
nums.swap(i, l);
}
l += 1;
} else if nums[i] > 1 {
if i == r {
break;
}
nums.swap(i, r);
r -= 1;
} else {
i += 1;
}
}
}
}
func sortColors(nums []int) {
i, l, r := 0, 0, len(nums)-1
for i <= r {
if nums[i] < 1 {
if i == l {
i++
} else {
nums[i], nums[l] = nums[l], nums[i]
}
l++
} else if nums[i] > 1 {
if i == r {
break
}
nums[i], nums[r] = nums[r], nums[i]
r--
} else {
i++
}
}
}
class Solution {
public:
void sortColors(vector<int>& nums) {
int i = 0, l = 0, r = nums.size() - 1;
while (i <= r) {
if (nums[i] < 1) {
if (i == l) {
++i;
} else {
swap(nums[i], nums[l]);
}
++l;
} else if (nums[i] > 1) {
if (i == r) {
break;
}
swap(nums[i], nums[r]);
--r;
} else {
++i;
}
}
}
};
class Solution:
def sortColors(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
i, l, r = 0, 0, len(nums) - 1
while i <= r:
if nums[i] < 1:
if i == l:
i += 1
else:
nums[i], nums[l] = nums[l], nums[i]
l += 1
elif nums[i] > 1:
if i == r:
break
nums[i], nums[r] = nums[r], nums[i]
r -= 1
else:
i += 1
class Solution {
public void sortColors(int[] nums) {
int i = 0, l = 0, r = nums.length - 1;
while (i <= r) {
if (nums[i] < 1) {
if (i == l) {
++i;
} else {
int t = nums[i];
nums[i] = nums[l];
nums[l] = t;
}
++l;
} else if (nums[i] > 1) {
if (i == r) {
break;
}
int t = nums[i];
nums[i] = nums[r];
nums[r] = t;
--r;
} else {
++i;
}
}
}
}
非常感谢你阅读本文~
欢迎【点赞】【收藏】【评论】三连走一波~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~