LeetCode: 75. 颜色分类
两次遍历
一次计算出0、1、2的个数 另一次根据个数进行赋值
public void sortColors(int[] nums) { int a = 0; int b = 0; int c = 0; // 统计 nums 中0、1、2的个数 for (int i = 0; i < nums.length; i++) { if (nums[i] == 0) { a++; } else { if (nums[i] == 1) { b++; } else { c++; } } } for (int i = 0; i < nums.length; i++) { if(i < a){ nums[i] = 0; }else if(i < a+b){ nums[i] = 1; }else { nums[i] = 2; } } }双指针法代码
class Solution { public void sortColors(int[] nums) { int left = 0; int right = nums.length - 1; for (int i = 0; i < nums.length; i++) { while (i < right && nums[i] == 2){ int temp = nums[i]; nums[i] = nums[right]; nums[right] = temp; right--; } if(nums[i] == 0){ int temp = nums[i]; nums[i] = nums[left]; nums[left] = temp; left++; } } } }