zoukankan      html  css  js  c++  java
  • leetcode 75. 颜色分类


    本题 题目链接

    题目描述


    我的题解

    方法:三路快排

    思路分析

    • 三路快排的应用+变形一下
    • 因为本题最多只有3个数,所以令 v 为2,只进行一次三路快排调用即可
    • 下面先给出三路快排的原模版。再给出我本题的代码

    • 三路快排的变量情况图:
    
    // 三项切分的快速排序
    private static void quick3way(int[] a, int lo, int hi) {
        if(hi <= lo)
            return;
        int lt = lo, i = lo+1, gt = hi;
        int v = a[lo];
        while(i <= gt) {
            if(a[i] < v) {
                int tmp = a[i];
                a[i++] = a[lt];
                a[lt++] = tmp;
            } else if(a[i] > v) {
                int tmp = a[i];
                a[i] = a[gt];
                a[gt--] = tmp;
            } else i++;
        }
        quick3way(a, lo, lt-1);
        quick3way(a, gt+1, hi);
    }
    

    我本题的代码如下

        public void sortColors(int[] nums) {
            if (nums == null)return;
            quick3way(nums,0,nums.length-1);
            // System.out.println(Arrays.toString(nums));
        }
    
        private void quick3way(int[] nums, int lo, int hi) {
            if (hi<=lo) return ;
            int lt=lo;
            int gt = hi;
            int i=lo;
            int v = 1;
            while (i <= gt) {
                if (nums[i] < v) {
                    if (i == lt) {
                        lt++;
                        i++;
                    } else {
                        int tmp = nums[i];
                        nums[i] = nums[lt];
                        nums[lt++] = tmp;
                    }
                } else if (nums[i] > v) {
                    int tmp = nums[i];
                    nums[i] = nums[gt];
                    nums[gt--] = tmp;
                } else i++;
            }
        }
    

  • 相关阅读:
    AutoMapper使用
    C#网络编程
    ASP.NET MVC (Razor)开发
    React的React Native
    WCF搭建
    异步编程
    Async和Await进行异步编程
    C#开发中使用配置文件
    NET转Java
    net 开源组件
  • 原文地址:https://www.cnblogs.com/duduwy/p/13413671.html
Copyright © 2011-2022 走看看