首页 > 其他 > 详细

leetcode 75. 颜色分类

时间:2020-08-01 12:24:28      阅读:77      评论:0      收藏:0      [点我收藏+]

本题 题目链接

题目描述

技术分享图片

我的题解

方法:三路快排

技术分享图片

思路分析

  • 三路快排的应用+变形一下
  • 因为本题最多只有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++;
        }
    }

leetcode 75. 颜色分类

原文:https://www.cnblogs.com/duduwy/p/13413671.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!