给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

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

示例:

输入: [2,0,2,1,1,0]
输出: [0,0,1,1,2,2]
进阶:

一个直观的解决方案是使用计数排序的两趟扫描算法。
首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2的排序,重写当前数组。
你能想出一个仅使用常数空间的一趟扫描算法吗?

方法一:时间复杂度:o(n^2)

一个排序算法就可以

public class Solution75 {
     public static void sortColors(int[] nums) {
            int i,j,t;
            int n = nums.length;
            for(i=0;i<n-1;i++)
            {
                for(j=0;j<n-1-i;j++)
                {
                    if(nums[j]>nums[j+1])
                    {
                        t = nums[j];
                        nums[j] = nums[j+1];
                        nums[j+1] = t;
                    }
                }
            }
            for(i=0;i<n;i++)
            {
                System.out.println(nums[i]);
            }
        }
     public static void main(String[] args)
     {
         int[] nums = {2,0,2,1,1,0};
         sortColors(nums);
     }
}
方法二:三指针法  时间复杂度:o(n)

一个指针从头遍历,一个指针判断0的个数,记录0的右边界,一个指针判断2的个数,记录2的左边界

当nums[i]的值为0,1是,都会i++,而值为2时,无此操作。

原因是后面位置上可能本来也是2,会换到前面,那就需要把这个2继续向后换

而值为0时他是相当于交换自己,所以无此考虑,可以执行i++

值为1时,1本来也要放在中间,也无需考虑
public class Solution75 {
     public static void sortColors(int[] nums) {
         int flag1,flag3;
         int i,t;
         int n = nums.length;
         flag1 = 0;
         flag3 = n-1;
         for(i=0;i<n;)
         {
             if(i>flag3||i<flag1)
             {
                 break;
             }
             
             if(nums[i]==0)
             {
                 t = nums[i];
                 nums[i] = nums[flag1];
                 nums[flag1] = t;
                 flag1++;
                 i++;
             }
             else if(nums[i]==2)
             {
                 t = nums[i];
                 nums[i] = nums[flag3];
                 nums[flag3] = t;
                 flag3--;
             }
             else
             {
                 i++;
             }
         }
         for(i=0;i<n;i++)
         {
             System.out.println(nums[i]);
         }
        }
     public static void main(String[] args)
     {
         int[] nums = {2,0,2,1,1,0};
         sortColors(nums);
     }
}

Leetcode--75. 颜色分类相关推荐

  1. LeetCode - 75 颜色分类

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

  2. leetcode —— 75. 颜色分类

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

  3. LeetCode 75. 颜色分类(Sort Colors)

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

  4. Leetcode 75. 颜色分类 (每日一题 20210817)

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

  5. leetcode 75. 颜色分类(双指针)

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

  6. LeetCode 75 颜色分类

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

  7. Leetcode算法Java全解答--75. 颜色分类

    Leetcode算法Java全解答–75. 颜色分类 文章目录 Leetcode算法Java全解答--75. 颜色分类 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 给定 ...

  8. 【leetcode】75.颜色分类(多种解法,超详细图文解析)

    75. 颜色分类 难度中等 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,**原地**对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 ...

  9. 75. 颜色分类(C++实现)

    文章目录 题目 思路--三指针 题目 题目链接:75. 颜色分类) 思路–三指针 其实颜色分类就是对 0 1 2 这三个数字进行排序,但是排序都是有效率之分的,我们希望可以通过一种高效的方法去排序这三 ...

  10. 2021.1.9每日复习 75.颜色分类(复习快速排序)+ 77.组合(回溯算法)

    ***75.颜色分类(复习快速排序) class Solution {public void sortColors(int[] nums) {//方法一:冒泡排序// int n = nums.len ...

最新文章

  1. JDK/Dubbo/Spring 三种 SPI 机制,谁更好?
  2. Dynamics 365新功能:可编辑的网格(行内编辑)
  3. 用JavaScript玩转计算机图形学(二)基本光源
  4. 活动结束|金融圈第19期分享:数据系统如何防范金融非统性风险?
  5. svn外网虚拟服务器设置,svn虚拟服务器设置路由器设置
  6. rocketmq 几种队列_进阶必看的 RocketMQ ,就这篇了
  7. SpaceX载人龙飞船意外爆炸,据称几乎被完全摧毁
  8. 使用python读取txt坐标文件生成挖空地块_批量
  9. 2011通信展:应用为王 国内3G终端企业集体发力
  10. 在Word2007文档中创建数学公式——使用Word公式编辑器
  11. 武汉Web前端开发薪水没有别人高?先弄明白这4点
  12. 如何防止域名被劫持?网站域名被劫持怎么办?怎么处理?
  13. 可编程计算机边长计算器,可编程科学计算器(Scientific Calculator Plus)
  14. ORACLE中triggers灰色的,Oracle之Triggers学习与测试_20091229
  15. 钱多多第二阶段冲刺07
  16. python requests+unittest+beautifulreport+jenkins实现接口自动化(中)
  17. Android多国语言翻译 字符串目录详解
  18. 近两年利用毫米波雷达生成的三维点云进行轨迹追踪相关文献
  19. 基于Layui上传组件(upload)的动态增加上传组件并使得每个上传组件都可独立上传
  20. linux 装Broadcom原生网卡

热门文章

  1. LeetCode 1128. 等价多米诺骨牌对的数量(哈希)
  2. 用python解决生活问题_Python解决生活问题之闹钟程序的实现
  3. python使方法执行10次_Python提升程序性能的七个手段
  4. 怎么读取matlab程序包,Nifti程序包,用于写入,读取和处理医学影像,适用于MATLAB
  5. php获取当前世界,php获取网站alexa世界流量排名代码
  6. winform响应时间最长是多少分钟_当詹姆斯退役时,他的总出场时间会达到多少分钟?...
  7. 推荐一个可交互的 Attention 可视化工具!我的Transformer可解释性有救啦?
  8. 超硬核 ICML’21 | 如何使自然语言生成提速五倍,且显存占用减低99%
  9. 从信息检索顶会CIKM'20看搜索、推荐与计算广告新进展
  10. OpenTSDB 造成 Hbase 整点压力过大问题的排查和解决