1.问题描述
https://leetcode-cn.com/problems/sort-colors/
2. 解题代码
2.1. 基本解法
public class Solution {
public void SortColors(int[] nums) {
int color_1=0;
int color_2=0;
int color_3=0;
for(int i=0;i<nums.Length;i++)
{
if(nums[i]==0)
{
color_1++;
}
else if(nums[i]==1)
{
color_2++;
}
else if(nums[i]==2)
{
color_3++;
}
}
int startIndex=0;
for(int i=0;i<color_1;i++)
{
nums[startIndex++]=0;
}
for(int i=0;i<color_2;i++)
{
nums[startIndex++]=1;
}
for(int i=0;i<color_3;i++)
{
nums[startIndex++]=2;
}
}
}
2.2. 单指针解法
public class Solution {
public void SortColors(int[] nums) {
int n = nums.Length;
int p0 = 0;
for (int i = 0; i < n; ++i) {
if (nums[i] == 0) {
Swap(nums,i,p0);
++p0;
}
}
for (int i = p0; i < n; ++i) {
if (nums[i] == 1) {
Swap(nums,i,p0);
++p0;
}
}
}
public void Swap(int[] nums,int indexA,int indexB)
{
int temp = nums[indexA];
nums[indexA] = nums[indexB];
nums[indexB] = temp;
}
}
2.3. 双指针解法
public void SortColors(int[] nums) {
int n = nums.Length;
int p0 = 0, p2 = n - 1;
for (int i = 0; i <= p2; ++i) {
while (i <= p2 && nums[i] == 2) {
Swap(nums,i,p2);
--p2;
}
if (nums[i] == 0) {
Swap(nums,i,p0);
++p0;
}
}
}
public void Swap(int[] nums,int indexA,int indexB)
{
int temp = nums[indexA];
nums[indexA] = nums[indexB];
nums[indexB] = temp;
}