zoukankan      html  css  js  c++  java
  • LintCode: Sort Colors

    通过交换,对0,1,2排序

    使用三个标记[循环不变式]

    i从前向后,记录最后一个0的位置

    j从后向前,记录第一个2的位置

    k从前向后,是遍历用的游标

    [0..i-1]是0

    [i..k-1]是1

    [k,j-1]是未探测

    [j..n-1]是2

    初始k=0时,0,1,2的区域都是空,所有区域都是未探测,循环k=0..n-1

    如果a[k] = 0=>swap(a[i++], a[k])

    如果a[k] = 1=>无操作

    如果a[k] = 2=>swap(a[--j], a[k--])

    复杂度O(n)

     1 class Solution{
     2 public:
     3     /**
     4      * @param nums: A list of integer which is 0, 1 or 2 
     5      * @return: nothing
     6      */    
     7     void sortColors(vector<int> &nums) {
     8         // write your code here
     9         int i = 0, j = nums.size();
    10         for (int k = 0; k < j; ++k) {
    11             if (nums[k] == 0) {
    12                 swap(nums[i++], nums[k]);
    13             } else if (nums[k] == 2) {
    14                 swap(nums[--j], nums[k--]);
    15             }
    16         }
    17     }
    18 };
  • 相关阅读:
    PPT1 例1
    皇宫看守 树形DP
    没有上司的晚会 树形DP
    将功补过 树形DP
    战略游戏 树形DP
    选课 树形DP
    二叉苹果树 树形DP
    GDOI2016总结
    加分二叉树 树形DP
    [注意]未做的题(最短路)
  • 原文地址:https://www.cnblogs.com/CheeseZH/p/5009541.html
Copyright © 2011-2022 走看看