评论区看到的一个方法,太妙了…只能说我怎么可能都想不到的题,只能进行记录了
三个指针num1、num2、num3将数组nums分成了3个分区,从左往右依次存储0、1、2。
三个指针分别指向各自分区的尾部。 从左到右遍历数组nums,
(1)如果nums[i]=0,则nums1、nums2都后移一个位置,给新来的0腾地方。
(2)如果是nums[i]=1,同样,nums2都后移一个位置,给新来的1腾地方。前面的nums0无影响。
class Solution {
public void sortColors(int[] nums) {
int num0 = 0, num1 = 0, num2 = 0;
for(int i = 0; i < nums.length; i++) {
if(nums[i] == 0) {
nums[num2++] = 2;
nums[num1++] = 1;
nums[num0++] = 0;
}else if(nums[i] == 1) {
nums[num2++] = 2;
nums[num1++] = 1;
}else {
nums[num2++] = 2;
}
}
}
}
本文介绍了一种使用三个指针的巧妙方法,实现对整数数组中0、1、2颜色的排序,通过移动指针调整分区,高效地完成颜色的归位。
6417

被折叠的 条评论
为什么被折叠?



