zoukankan      html  css  js  c++  java
  • 75. Sort Colors

    最后更新

    四刷(我怎么觉得三刷没做完就四刷了。。)

    典型的Partition,总结出一个general的方法了。

    Time: O(n)

    public class Solution {
        public void sortColors(int[] nums) {
            if (nums.length <= 1) return;
            
            int left = 0;
            int right = nums.length - 1;
            int temp = left;
            while (temp <= right) {
                if (nums[temp] == 1) {
                    temp ++;
                } else if (nums[temp] == 0) {
                    swap(temp ++, left ++, nums);
                } else {
                    swap(temp, right --, nums);
                }
            }
            return;
        }
        
        public void swap(int l, int r, int[] nums) {
            int temp = nums[l];
            nums[l] = nums[r];
            nums[r] = temp;
        }
    }
    

    一般follow up是sort k colors,比如 PocketGem的面试题。 (吐槽下这个傻逼公司的印度人,题都他妈做对了给我挂了。仔细一想我面试挂都是印度人挂的)

    Sort K colors

    K是最大值,假设最小是0。。

    用0 1 2试验是过的= = 记得lintcode上有原题。

    public class Solution {
        public void sortColors(int[] nums) {
            if (nums.length <= 1) return;
            int k = 2;
            int start = 0;
            int end = nums.length - 1;
            
            int min = 0;
            int max = k;
            
            while (start < end) {
                int temp = start;
                while (temp <= end) {
                    if (nums[temp] == min) {
                        swap(temp ++, start ++, nums);
                    } else if (nums[temp] == max) {
                        swap(temp, end --, nums);
                    } else {
                        temp ++;
                    }
                }
                min ++;
                max --;
            }
            return;
        }
        
        public void swap(int l, int r, int[] nums) {
            int temp = nums[l];
            nums[l] = nums[r];
            nums[r] = temp;
        }
    }
    

    二刷。。

    一样的做法。。

    public class Solution {
        public void sortColors(int[] nums) {
            if (nums.length <= 1) return;
            int red = 0, blue = 0;
            for (int white = 0; white < nums.length - blue; white++) {
                if (nums[white] == 0) {
                    nums[white] = nums[red];
                    nums[red++] = 0;
                } else if (nums[white] == 1) {
                
                } else {
                    nums[white] = nums[nums.length-1-blue];
                    nums[nums.length-1-blue] = 2;
                    blue++;
                    white--;
                }
            }
            
            return;
        }
    }
    

    三刷。

    记录3种颜色的数量,partition..

    public class Solution {
        public void sortColors(int[] nums) {
            if (nums.length <= 1) return;
            // 0 red.   1 white,   2 blue
            int r = 0;
            int b = 0;
            for (int w = 0; w < nums.length - b; w++) {
                if (nums[w] == 0) {
                    nums[w] = nums[r];
                    nums[r++] = 0;
                } else if (nums[w] == 1) {
                    continue;
                } else {
                    nums[w] = nums[nums.length - b - 1];
                    nums[nums.length - b - 1] = 2;
                    b ++;
                    w--;
                }
            }
            
            return;
        }
    }
    
  • 相关阅读:
    led呼吸灯
    定时器中断
    npgsql
    中断
    PAT (Advanced Level) 1128~1131:1128N皇后 1129 模拟推荐系统(set<Node>优化) 1130 中缀表达式
    PAT (Advanced Level) 1132~1135:1132 模拟 1133模拟(易超时!) 1134图 1135红黑树
    PAT (Advanced Level) 1136~1139:1136模拟 1137模拟 1138 前序中序求后序 1139模拟
    PAT (Advanced Level) 1140~1143:1140模拟 1141模拟 1142暴力 1143 BST+LCA
    PAT (Advanced Level) 1144~1147:1145Hash二次探查 1146拓扑排序 1147堆
    python实现http接口测试
  • 原文地址:https://www.cnblogs.com/reboot329/p/6168422.html
Copyright © 2011-2022 走看看