zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    android开发系列之gradle认识
    angularjs+nodejs+mongodb三件套
    我对服务端开发的一些认识
    近几个月的技术总结
    IOS设计模式的六大设计原则之单一职责原则(SRP,Single Responsibility Principle)
    第二阶段第八次站立会议
    第二阶段第七次站立会议
    第二阶段第六次站立会议
    第二阶段第五次站立会议
    第二阶段第四次站立会议
  • 原文地址:https://www.cnblogs.com/-wang-cheng/p/4903631.html
Copyright © 2011-2022 走看看