zoukankan      html  css  js  c++  java
  • 【LeetCode】075. 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.

    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?

    解1 计数排序

     1 class Solution {
     2 public:
     3     void sortColors(vector<int>& v) {
     4         vector<int> count(3, 0);
     5         
     6         for (int i = 0; i < v.size(); ++i) {
     7             if (v[i] == 0) {
     8                 ++count[0];
     9             } else if (v[i] == 1) {
    10                 ++count[1];
    11             } else {
    12                 ++count[2];
    13             }
    14         }
    15         
    16         int it = 0;
    17         for (int i = 0; i < 3; ++i) {
    18             for (int j = 0; j < count[i]; ++j) {
    19                 v[it++] = i;
    20             }
    21         }
    22     }
    23 };

    解2 双指针思想的延伸

     1 class Solution {
     2 public:
     3     void sortColors(vector<int>& v) {
     4         int low = 0, mid = 0, high = v.size() - 1;
     5         while (mid <= high) {
     6             if (v[mid] == 0) {
     7                 swap(v[mid], v[low]);
     8                 ++low;
     9                 ++mid;
    10             } else if (v[mid] == 2) {
    11                 swap(v[mid], v[high]);
    12                 --high;
    13             } else {
    14                 ++mid;
    15             }
    16         }
    17     }
    18 };

    解3 比较有技巧

     1 class Solution {
     2 public:
     3     void sortColors(vector<int>& v) {
     4         int n0 = -1, n1 = -1, n2 = -1;
     5         
     6         for (int i = 0; i < v.size(); ++i) {
     7             if (v[i] == 0) {
     8                 v[++n2] = 2;
     9                 v[++n1] = 1;
    10                 v[++n0] = 0;
    11             } else if (v[i] == 1) {
    12                 v[++n2] = 2;
    13                 v[++n1] = 1;
    14             } else {
    15                 v[++n2] = 2;
    16             }
    17         }
    18     }
    19 };
  • 相关阅读:
    X264参考手册
    X264码率控制总结
    x264_param_t结构体解释,设置及对应函数位置
    FFmpeg与libx264 x264接口对应关系源代码分析
    x264源代码学习1:概述与架构分析
    X264使用指南
    X264学习1:简介
    PHPMailer 使用 中文乱码
    laravel学习之路5缓存
    laravel学习之路4artisan
  • 原文地址:https://www.cnblogs.com/Atanisi/p/8585433.html
Copyright © 2011-2022 走看看