LeetCode算法系列:75. Sort Colors

版权声明:由于一些问题,理论类博客放到了blogger上,希望各位看官莅临指教https://efanbh.blogspot.com/;本文为博主原创文章,转载请注明本文来源 https://blog.csdn.net/wyf826459/article/details/82885698

题目描述:

Given an array with n objects colored red, white or blue, sort them in-place 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.

Example:

Input: [2,0,2,1,1,0]
Output: [0,0,1,1,2,2]

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 a one-pass algorithm using only constant space?

算法实现:

问题的关键在于一次扫描数组来实现排序,把思路讲清就会比较简单,就是一次扫描,遇到的0交换到左侧头部,遇到的2交换到右侧尾部,程序:

class Solution {
public:
    void sortColors(vector<int>& nums) {
        int n = nums.size();
        int i = 0, j = n - 1;
        for(int k = 0; k < n; k ++){
            while(k >= i && k <= j && nums[k] != 1){
                if(nums[k] == 0)swap(nums[k],nums[i ++]);
                else swap(nums[k],nums[j --]);
            }
        }
    }
};

猜你喜欢

转载自blog.csdn.net/wyf826459/article/details/82885698