zoukankan      html  css  js  c++  java
  • 力扣第75题(荷兰国旗问题)

    题目:

      给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

    注意:
      不能使用代码库中的排序函数来解决这道题。

    第一种分析:

      考虑使用桶排序,因为只有红白蓝三种颜色,且分别用0、1、2代表,那么就可以将颜色代码作为键值,作为桶标记,将相同颜色的元素放入同一个桶中,然后再正序遍历各个桶存入到原数组,时间复杂度是线性的,o(3+n),n是元素的个数。

        public void sortColors(int[] nums) {
            if (nums.length == 0 || nums == null){
                return;
            }
            int[] bucket = new int[3];
            for (int num : nums) {
                if (num == 0){
                    bucket[0]++;
                }else if (num == 1){
                    bucket[1]++;
                }else if (num == 2){
                    bucket[2]++;
                }
            }
            int k = 0;
            for (int i = 0; i < bucket.length; i++) {
                for (int j = 0; j < bucket[i]; j++) {
                    nums[k++] = i;
                }
            }
        }

    未完待续。。。。。

  • 相关阅读:
    Python基础四
    Python基础三
    Python基础二
    Python基础一
    JAVA测试
    国庆随笔
    ATM-JAVA程序 //程序有5处相同错误,找不出原因 转账功能没有实现,修改密码来不及实现了
    JAVA程序测试感受
    第八周
    第七周
  • 原文地址:https://www.cnblogs.com/yxym2016/p/12960902.html
Copyright © 2011-2022 走看看