class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param colors int整型vector * @return int整型vector */ vector<int> sortColor(vector<int>& colors) { int n = colors.size(); // 只聚焦于0和2,当把0和2都处理完后,1自然也处理好了 int p0 = 0, p2 = n-1; // 从数组头元素开始遍历,直到与p2相遇后,因为p2索引后的元素应该排好了2 for(int i=0; i<=p2; ++i){ // 如果当前遇到了2,且索引符合置换条件,那么就交换 // 因为之前的p2所指位置可能本身也是2,所以是while循环判断 while(colors[i]==2 && i < p2){ swap(colors[i], colors[p2--]); } // 如果遇到了0 (或者说原本是2,但经过上面的while代码块交换后,换回来了一个0),那么与p0索引交换 if(colors[i]==0) swap(colors[i],colors[p0++]); } return colors; } };