赞
踩
Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue.
Here, we will use the integers 0, 1, and 2 to represent the color red, white, and blue respectively.
Note:
You are not suppose to use the library's sort function for this problem.
解题:
如果第一次遍历,统计0,1,2的次数,第二次遍历赋值,非常容易。
改进:(one-pass)
三个指针 :
left:记录0
right:记录2
i:遍历数组用的
遍历的过程中 遇到1直接跳过,i++;遇到0则i与left位置对换,left++,i++;遇到2,i与right对换,right—,但是i不变
代码:
int left = 0;
int right = nums.length-1;
int temp = -1;
for(int i=0;i<=right;i++){
if(nums[i]==0){
temp = nums[left];
nums[left] = nums[i];
nums[i]=temp;
left++;
}
if(nums[i]==2){
temp = nums[right];
nums[right]=nums[i];
nums[i]=temp;
right--;
i--;
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。