一、题目
1、审题
2、分析
荷兰国旗问题。用 0,1,2 代表颜色,将数组中的所有的 0 排在前面, 1 排在中间,2排在后面。
二、解答
1、思路:
①、选用三个指针。 left 与 current 指向下标为 0 的元素; right 指向数组末尾。
②、遍历数组,当 current <= right 时:
当 current 指向元素为 0 时,交换 left、current 的值,同时 left++,current++;
当 current 指向元素为 1 时,current++;
当current 指向元素为 2 时,交换 current、right 值,同时 right--
public void sortColors2(int[] nums) { int len = nums.length; if(len < 2) return; int left = 0; int right = len - 1; int current = 0; while(current <= right) { if(nums[current] == 0){ swap(nums, left, current); left++; current++; } else if(nums[current] == 1) { current++; } else { swap(nums, right, current); right--; } } }