
解法1: 当然可以冒泡排序,时间复杂度O( n 2 n^2 n2)
解法2:单指针
循环两次,第一次循环将所有的 0 交换到前面;
第二次循环将所有的 1 交换到 0 的后面
java
class Solution {
public void sortColorsBySinglePointer(int[] nums) {
int zeroCnt = 0, p = 0;
for (int i = 0; i < nums.length ; i++) {
if (nums[i] == 0) {
p = nums[zeroCnt];
nums[zeroCnt] = 0;
nums[i] = p;
zeroCnt++;
}
}
// 继续沿着zeroCnt的位置放 1
for (int i = 0; i < nums.length ; i++) {
if (nums[i] == 1) {
p = nums[zeroCnt];
nums[zeroCnt] = 1;
nums[i] = p;
zeroCnt++;
}
}
}
}
解法3:双指针
使用一次循环,过程中使用两个指针,将所有的 0 放前面,所有的 2 放后面
或者将所有的 0 放前面,所有的 1 放 0 后面