https://leetcode.com/problems/sort-colors/
题意:一次遍历数组完成排序将0,1,2安排妥当
这道题是可以用三向切分排序的思想解决,算法思路参考https://mp.csdn.net/postedit/83472800。
设置两个数组下标start和end和一个遍历指针i:[0,start)存储0,[1,i)存储1,[i,end]中的数等待遍历,(end,nums.length-1]存储2,0,1,2是不是都被安排的明明白白!
class Solution {
public void sortColors(int[] nums) {
int start=0,end=nums.length-1;
int i=start;
while(i<=end)
{
if(nums[i]==2)
{
nums[i]=nums[end];
nums[end]=2;
end--;
i--;
//用2与nums[end]交换,nums[end]可能是0,所以需要再次判断!
}
else if(nums[i]==0)
{
nums[i]=nums[start];
nums[start]=0;
start++;
}
i++;
}
}
}
思路二(两次遍历):
第一次遍历计算0,1,2的个数,然后第二次遍历修改数字。