Leetcode--75. 颜色分类

给定一个包含红色、白色和蓝色,一共 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);
     }
}
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485969.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

boot druid 长时间不连接 异常_Spring Boot学习:如何使用Druid数据源

Druid概述Druid是阿里巴巴开源的一款非常优秀的数据库连接池。在Java应用程序开发中&#xff0c;常用的连接池还有DBCP、C3P0、Proxool等。SpringBoot2.X 版本开始默认的是HikariCP(号称性能最好的数据库连接池),Druid性能好而且监控也比较方便。刚兴趣的同学可以读一下,GitHub…

演讲实录丨中科大陈小平教授《从封闭性到非封闭性:2020到2035年智能机器的机遇和挑战》...

来源&#xff1a;中国人工智能学会陈小平中国科学技术大学机器人实验室主任、教授以下是陈小平教授的演讲实录&#xff1a;非常高兴有这个机会进行中、新学术交流。本报告包括四方面内容。第一&#xff0c;关于人工智能&#xff08;简称AI&#xff09;的两种类型&#xff0c;一…

充电电流用软件测试准吗,实验:1A与2.1A对手机充电电流一样的,小伙伴再也不用担心咯...

新福克斯舒适&#xff0c;USB在手套箱(不方便啊&#xff0c;郁闷)&#xff0c;插U盘放MP3&#xff0c;一个行车记录仪&#xff0c;插在点烟器里&#xff0c;平时没事也够用&#xff0c;要跑一次长途&#xff0c;用iPhone 5C高德导航&#xff0c;靠&#xff0c;问题来&#…

关于线性代数的理解

自从大学学了线性代数以来, 对线性代数的概念一直很迷惑. 感觉中间像是隔了一层布一样, 怎么都理解不了线性代数是个什么东西. 读了人工智能以后, 发现没有线性代数的扎实基础根本学不了人工智能, 特别是在图像处理还是自然语言处理的过程中, 线性代数是 一个非常重要的基础, 可…

Leetcode--31. 下一个排列

实现获取下一个排列的函数&#xff0c;算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列&#xff0c;则将数字重新排列成最小的排列&#xff08;即升序排列&#xff09;。 必须原地修改&#xff0c;只允许使用额外常数空间。 以下是…

python 结尾回车_理解不了Python正则表达式?我帮你搞定

点击蓝字“python教程”关注我们哟&#xff01;在学习Python的过程中&#xff0c;我们难免会遇到比较晦涩、难以理解的内容&#xff0c;比如Python中的正则表达式、面向对象等内容&#xff0c;为了更好地帮助大家理解&#xff0c;我们今天就先为大家详细解读Python正则表达式&a…

怎么设置班级文件服务器,如何开设论坛如题下学期老师组织学生开一个班级论坛有专用服务器接下 爱问知识人...

很多朋友都希望有一个自己的论坛&#xff0c;但是做论坛又谈何容易&#xff1f;这个问题很大&#xff0c;如果自己编程开发的话&#xff0c;至少需要半个月不睡觉甚至好几个月、好几年的时间。一个好的论坛&#xff0c;便于网友浏览、占用服务器资源少、运行速度快是最重要的。…

陈左宁院士:人工智能模型和算法的七大发展趋势

来源&#xff1a;C114通信网、北京物联网智能技术应用协会在近日举行的“第十六届CCF全过高性能计算学术年会”上&#xff0c;中国工程院副院长、中国科协副主席、中国工程院院士陈左宁发表了题为《人工智能进展对算力需求分析》的演讲。在演讲中&#xff0c;她阐述了人工智能模…

ABAP术语-World Wide Web

World Wide Web原文&#xff1a;http://www.cnblogs.com/qiangsheng/archive/2008/03/21/1115728.htmlInternet service. The World Wide Web generates documents and presents them to Internet users in a standard format known as HTML. These documents can be linked to…

Leetcode--169. 求众数

给定一个大小为 n 的数组&#xff0c;找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在众数。 示例 1: 输入: [3,2,3] 输出: 3 示例 2: 输入: [2,2,1,1,1,2,2] 输出: 2 排序之后遍历一次即可 …

模板引擎工作原理_广州seo了解下搜索引擎的工作原理是什么

一、搜索引擎工作的基本原理搜索引擎是根据以下原则计算的&#xff1a;首先&#xff0c;我们知道在web浏览器、百度浏览器、google浏览器、360浏览器中都配置了不同的搜索引擎。它们都有一个共同点&#xff0c;一开始捕获一个模块&#xff0c;然后这个模块就像一个软件程序一样…

浪潮服务器无线网卡驱动,浪潮服务器网卡驱动安装.doc

文档介绍&#xff1a;蚃服务器安装redhat5.2系统无法识别网卡的情况下肂罿进入linux命令终端界面,使用命令袄蒂[******wapdbrac1~]#kudzu--probe--work膂莀界面上就会显示网卡的型号以及机器上都有几个网卡薆蒅第一步:在网上下载这个网卡型号的linux版本驱动程序节薇第二步:使用…

罗杰·科恩伯格:基础科学——人类进步的希望

论坛 演讲编辑: ∑Gemini来源:数据实战派人物介绍&#xff1a;罗杰科恩伯格&#xff08;Roger Kornberg&#xff09;&#xff0c;世界顶尖科学家协会主席&#xff0c;斯坦福大学温泽医学教授。因对“真核生物转录的分子基础”的研究&#xff0c;获得2006年诺贝尔化学奖。罗杰•…

vue3获取验证码+背景切换

需要安装element-plus组件库 用户获取验证码后按钮会被禁用&#xff0c;等待10秒后重新获取验证码 验证码 元素布局template部分 <template><div><el-button type"success" round :disabled"isSend" click"countDown">{{ c…

Leetcode--19. 删除链表的倒数第N个节点

给定一个链表&#xff0c;删除链表的倒数第 n 个节点&#xff0c;并且返回链表的头结点。 示例&#xff1a; 给定一个链表: 1->2->3->4->5, 和 n 2. 当删除了倒数第二个节点后&#xff0c;链表变为 1->2->3->5. 说明&#xff1a; 给定的 n 保证是有效…

python 几种常用测试框架

测试的常用规则 一个测试单元必须关注一个很小的功能函数&#xff0c;证明它是正确的&#xff1b;每个测试单元必须是完全独立的&#xff0c;必须能单独运行。这样意味着每一个测试方法必须重新加载数据&#xff0c;执行完毕后做一些清理工作。通常通过setUp()和setDown()方法处…

jdbc获取结果行数,如何获取JDBC中的行数?

Ive executed a JDBC query to obtain a resultset. Before iterating over it, Id like to quickly find out how many rows were returned. How can I do this with high performance?Im using Java 6, Oracle 11g, and the latest Oracle JDBC drivers.解决方案Youre going…

服务器系统盘最佳设置,启用系统的硬盘高级性能设置优化硬盘到最佳性能

硬盘性能直接关系到网吧机器的性能&#xff0c;如果是无盘服务器上的硬盘&#xff0c;那更是整个网吧的核心性能。所以一定要好好优化下&#xff0c;下面推荐一个小技巧吧&#xff1a;启用硬盘高级性能 \ 硬件管理器&#xff0c;选一个磁盘&#xff0c;右键属性&#xff0c;上…

ASML 1nm光刻机研究进展:摩尔定律尚未结束

文章来源&#xff1a;Sparrows NEWS、新智元摩尔定律的终点是什么&#xff1f;随着5nm光刻技术的大规模生产和3nm的突破&#xff0c;摩尔定律的终结变得越来越难以捉摸。可以肯定的是&#xff0c;随着过程的进一步改进&#xff0c;其成本将成倍增加。根据日本媒体Mynavi的报道&…

Leetcode--53. 最大子序和

给定一个整数数组 nums &#xff0c;找到一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大&#xff0c;为 6。 进阶: 如果你已经…