/**75. Sort Colors
* @param nums
* red,white,blue,不能使用常规排序
*/
public void sortColors0(
int[] nums) {
int red = -
1, white = -
1, blue = -
1;
for (
int i =
0; i < nums.length; i++) {
if (nums[i] ==
0) {
red++;
}
else if (nums[i] ==
1) {
white++;
}
else if (nums[i] ==
2) {
blue++;
}
}
for (
int i =
0; i < nums.length; i++) {
if (red >=
0) {
nums[i] =
0;
red--;
}
else if (white >=
0) {
nums[i] =
1;
white--;
}
else if (blue >=
0) {
nums[i] =
2;
blue--;
}
}
}
//统计个数,之后再次赋值
改进:利用双指针移动
public void sortColors(
int[] nums) {
int red =
0;
int blue = nums.length-
1;
for (
int i =
0; i < blue+
1; ) {
if (nums[i] ==
0) {
int temp = nums[red];
nums[red] = nums[i];
nums[i] = temp;
++red;
++i;
}
else if (nums[i] ==
2) {
int temp = nums[blue];
nums[blue] = nums[i];
nums[i] = temp;
--blue;
}
else {
++i;
}
}
}
red和blue分别指向头0,和尾length-1 遍历数组: 发现[i]=0,交换[i]和[red] 发现[i]=2,交换[i]和[blue]
转载请注明原文地址: https://ju.6miu.com/read-13286.html