• LeetCode OJ: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.

    将数组中的0,1,2分别排序,使得相同的数字相邻,这个比较简单,直接看代码:

     1 class Solution {
     2 public:
     3     void sortColors(vector<int>& nums) {
     4         int redNum = count(nums.begin(), nums.end(), 0);
     5         int whiteNum = count(nums.begin(), nums.end(), 1);
     6         int blueNum = count(nums.begin(), nums.end(), 2);
     7         int sz = nums.size();
     8         vector<int> ret(sz, 0);
     9         int redCount = 0, whiteCount = 0, blueCount = 0 ;
    10         for(int i = 0; i < sz; ++i){
    11             if(nums[i] == 0){
    12                 ret[redCount++] = 0;
    13             }else if(nums[i] == 1){
    14                 ret[whiteCount + redNum] = 1;
    15                 whiteCount++;
    16             }else{
    17                 ret[blueCount + redNum + whiteNum] = 2;
    18                 blueCount++;
    19             }
    20         }
    21         nums = ret;
    22     }
    23 };

     当时题目要求的事one-pass,const-space algorithm,当时硬是没想出来,现在看了下别人的解答,真简洁,原理很简单,3指针,画个图就能看懂了,代码如下所示:

     1 public class Solution {
     2     public void sortColors(int[] nums) {
     3         int i = 0;
     4         int j = nums.length - 1;
     5         int k = nums.length - 1;
     6         while(i <= j){
     7             if(nums[i] == 2){
     8                 int tmp = nums[k];
     9                 nums[k] = nums[i];
    10                 nums[i] = tmp;
    11                 k--;
    12                 if(k < j)
    13                     j = k;
    14             }else if(nums[i] == 1){
    15                 int tmp = nums[j];
    16                 nums[j] = nums[i];
    17                 nums[i] = tmp;
    18                 j--;
    19             }else{
    20                 i++;
    21             }
    22         }
    23     }
    24 }
  • 相关阅读:
    [LeetCode][SQL]Rising Temperature
    google API的.NET库
    Google Reader的另一个开源的替代品Go Read
    C#中反射接受的字符串需要满足的Backus-Naur Form语法
    Windows的应用管理工具 PortableApps,Chocolatey和Ninite
    如何定制Windows系统右键菜单
    另一个有趣的Captcha 网站
    .gitignore模板
    遇到sql server的问题时如何排查
    如何传播你的代码
  • 原文地址:https://www.cnblogs.com/-wang-cheng/p/4903631.html
Copyright © 2020-2023  润新知