Open larscheng opened 4 months ago
双指针 方法1:
方法2:
O(n)/O(1)
class Solution {
public void sortColors(int[] nums) {
int n = nums.length;
int p0 =0,p1=0;
for (int i = 0; i < n; i++) {
if (nums[i]==1){
int temp = nums[i];
nums[i]=nums[p1];
nums[p1] = temp;
++p1;
} else if (nums[i]==0) {
int temp = nums[i];
nums[i] = nums[p0];
nums[p0] = temp;
//把nums[i]的0与p0交换后,如果p0小于p1,说明在此前已经有1放在了p0处
//此时需要把nums[i]与p1交换,重新把这个1放到前面
if (p0 < p1) {
temp = nums[i];
nums[i] = nums[p1];
nums[p1] = temp;
}
++p0;
++p1;
}
}
}
}
class Solution {
public void sortColors(int[] nums) {
int n = nums.length;
int p0 =0,p2=n-1;
for (int i = 0; i <= p2; i++) {
//被交换过来的元素有可能也是2
while (i <= p2 && nums[i] == 2) {
int temp = nums[i];
nums[i] = nums[p2];
nums[p2] = temp;
--p2;
}
if (nums[i]==0){
int temp = nums[i];
nums[i]=nums[p0];
nums[p0] = temp;
++p0;
}
}
}
}
75. 颜色分类