leetcode题解75-颜色分类
发布日期:2025-04-05 06:21:30 浏览次数:9 分类:精选文章

本文共 1030 字,大约阅读时间需要 3 分钟。

要解决给定的问题,我们需要对数组进行原地排序,使得相同颜色的元素相邻,并按照红色(0)、白色(1)、蓝色(2)的顺序排列。以下是详细的步骤说明:

解题思路

  • 统计颜色数量:首先,我们需要统计数组中每种颜色的数量。这可以通过一次遍历来完成。
  • 重写数组:根据统计的颜色数量,将数组重写为红色、白色、蓝色分别按顺序排列的形式。
  • 这种方法时间复杂度为 O(n),其中 n 是数组的长度。因为我们只需要两次遍历(一次统计,一次重写)即可完成任务,因此效率很高。

    代码实现

    public class Solution {    public void sortColors(int[] nums) {        int count0 = 0, count1 = 0, count2 = 0;        for (int num : nums) {            if (num == 0) {                count0++;            } else if (num == 1) {                count1++;            } else {                count2++;            }        }        int index = 0;        while (index < nums.length) {            for (int i = 0; i < count0; i++) {                nums[index++] = 0;            }            for (int i = 0; i < count1; i++) {                nums[index++] = 1;            }            for (int i = 0; i < count2; i++) {                nums[index++] = 2;            }        }    }}

    解释

  • 统计颜色数量:首先遍历数组,统计每种颜色的出现次数(count0、count1、count2)。
  • 重写数组:使用索引指针index来逐个填充数组。先将所有0填充进去,接着是1,然后是2。这样,相同颜色的元素就会相邻,并且顺序按照红色、白色、蓝色排列。
  • 上一篇:leetcode题解767-重构字符串
    下一篇:leetcode题解72-编辑距离

    发表评论

    最新留言

    初次前来,多多关照!
    [***.217.46.12]2025年05月14日 22时14分22秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章