75. 颜色分类


描述

给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

链接

75. 颜色分类 - 力扣(LeetCode) (leetcode-cn.com)

解法:快速排序的思想

 1 class Solution {
 2     public void sortColors(int[] nums) {
 3         int left =  0;
 4         int right = nums.length - 1;
 5         int index = 0;
 6         // 核心思想在于 选基准值,pivot
 7         while (index <= right) {
 8             int cur = nums[index];
 9             if(cur == 0) {
10                 swap (nums, left , index);
11                 index++;
12                 left++;
13             }
14             else if (cur == 1) {
15                 index++;
16             }
17             else if (cur == 2) {
18                 swap(nums, index, right);
19                 right--;
20             }
21         }
22     }
23 
24     public void swap (int[] nums, int i, int j) {
25         int temp = nums[i];
26         nums[i] = nums[j];
27         nums[j] = temp;
28     }
29 }

题解链接

吴师兄