给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地 对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
必须在不使用库内置的 sort 函数的情况下解决这个问题。
class Solution {public void sortColors(int[] nums) {for (int i = 0; i < nums.length; i++) {for (int j = i + 1; j < nums.length; j++) {if (nums[i] > nums[j]) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}}}}
}
时间复杂度:O(n²),空间复杂度:O(1)。
class Solution {public void sortColors(int[] nums) {int p = 0;int q = nums.length - 1;for (int i = 0; i < nums.length; i++) {while (i <= q && nums[i] == 2) {int temp = nums[i];nums[i] = nums[q];nums[q] = temp;q--;}if (nums[i] == 0) {int temp = nums[i];nums[i] = nums[p];nums[p] = temp;p++;}}}
}
时间复杂度:O(n),空间复杂度:O(1)。