leetcode 75. Sort Colors

来源:互联网 发布:windows xp 反复重启 编辑:程序博客网 时间:2024/06/04 18:16

首先是一个计数的思路:代码如下不难理解。

   void sortColors(vector<int>& nums) {    if (nums.empty())        return;    //初始化一个count数组,count[0] , count[1] , count[2] 分别记录nums中0 , 1 , 2出现个数    vector<int> count(3, 0);    vector<int>::iterator iter = nums.begin();    for (; iter != nums.end(); iter++)    {        if (*iter == 0)            count[0]++;        else if (*iter == 1)            count[1]++;        else if (*iter == 2)            count[2]++;    }//for    //对原数组排序    int i = 0;    while (i < count[0])        nums[i++] = 0;    while (i < (count[0] + count[1]))        nums[i++] = 1;    while (i < (count[0] + count[1] + count[2]))        nums[i++] = 2;    return;}

从网上看了两指针的方法,思路很清晰,拷贝学习下:

   void sortColors(vector<int>& nums) {    int i = 0, j = i, k = nums.size() - 1;    while(j <= k){        if(nums[j] == 0) swap(nums[i++], nums[j++]);//0交换到前面        else if(nums[j] == 1) j++;//1保持不动        else swap(nums[k--], nums[j]);//2交换到尾部        }}

代码比上述多点,但是思路一致帮助理解:

 void sortColors(vector<int>& nums) {    int start = 0;    int end = nums.size()-1;    for(int i = 0 ; i<nums.size();i++)//把0交换到前面    {        if(nums[i]==0) {            if(i!=start) swap(nums[i],nums[start]);            start++;        }    }    for(int i = nums.size()-1 ; i>=start ;i--)//把2交换到尾部    {        if(nums[i]==2){            if(i!=end) swap(nums[i],nums[end]);            end--;        }    }}
0 0
原创粉丝点击