LeetCode - 75. Sort Colors 计数排序和快速排序变形

发布于 2024-09-16 04:23:51 字数 1227 浏览 8 评论 0

题目

使用类似计数排序解决

这个思路很简单,直接统计这三个数字出现的次数,然后填充一遍即可。

public void sortColors(int[] nums) {
    int[] count = new int[3];
    for(int i = 0; i < nums.length; i++)
        count[nums[i]]++;
    int k = 0;
    for(int i = 0; i < 3; i++){
        for(int j = 0; j < count[i]; j++){
            nums[k++] = i;
        }
    }
}

使用快速排序的 partition 过程解决

还可以使用快速排序中的三路快排的思想来解决这个问题,快速排序的 partition 过程也是经典的荷兰国旗问题。

public void sortColors(int[] nums) {
    if(nums == null || nums.length < 2)
        return;
    partition(nums,0,nums.length-1);
}

public void partition(int[] arr,int L,int R){
    int less = -1;//左边界
    int more = arr.length; //右边界 
    int cur = 0;
    while(cur < more){
        if(arr[cur] == 0)
            swap(arr,++less,cur++);
        else if(arr[cur] == 2)
            swap(arr,--more,cur);
        else 
            cur++;
    }
}
private void swap(int[] arr,int i,int j){
    int t = arr[i];
    arr[i] = arr[j];
    arr[j] = t;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

绳情

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

我们的影子

文章 0 评论 0

素年丶

文章 0 评论 0

南笙

文章 0 评论 0

18215568913

文章 0 评论 0

qq_xk7Ean

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文