Leetcode——75. Sort Colors

来源:互联网 发布:淘宝如何买东西 编辑:程序博客网 时间:2024/06/06 09:40

题目:

https://leetcode.com/problems/sort-colors/
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.

click to show follow up.

Follow up:
A rather straight forward solution is a two-pass algorithm using counting sort.
First, iterate the array counting number of 0’s, 1’s, and 2’s, then overwrite array with total number of 0’s, then 1’s and followed by 2’s.

Could you come up with an one-pass algorithm using only constant space?

解答

两个解法:

class Solution1 {public:    void sortColors(vector<int>& nums) {        int red=0,white=0,blue=0;        for(int i=0;i<nums.size();i++)        {            if(nums[i]==0) red++;            else if(nums[i]==1) white++;            else blue++;        }        for(int index=0;index<nums.size();index++)        {            if(red>0)            {                red--;                nums[index]=0;            }            else if(white>0)            {                white--;                nums[index]=1;            }            else if(blue>0)            {                blue--;                nums[index]=2;            }        }    }};class Solution {public:    void sortColors(vector<int>& nums) {      int low=0,high=nums.size()-1;      for(int i=0;i<=high;)      {          if(nums[i]==0)          {              swap(nums[i],nums[low]);              low++;              i++;          }          else if(nums[i]==2)          {              swap(nums[i],nums[high]);              high--;           }          else            i++;      }    }};

第一个是两趟:计数排序
第二个是一趟:把是2的都挪到右边,是0的都挪到左边。在挪的过程中,需要注意边界条件的增减!
https://discuss.leetcode.com/topic/5422/share-my-one-pass-constant-space-10-line-solution/54

0 0
原创粉丝点击