148. 颜色分类

给定一个包含红,白,蓝且长度为 n 的数组,将数组元素进行分类使相同颜色的元素相邻,并按照红、白、蓝的顺序进行排序。

我们可以使用整数 0,1 和 2 分别代表红,白,蓝。

 注意事项

不能使用代码库中的排序函数来解决这个问题。
排序需要在原数组中进行。

样例

给你数组 [1, 0, 1, 2], 需要将该数组原地排序为 [0, 1, 1, 2]

挑战 

一个相当直接的解决方案是使用计数排序扫描2遍的算法。

首先,迭代数组计算 0,1,2 出现的次数,然后依次用 0,1,2 出现的次数去覆盖数组。

你否能想出一个仅使用常数级额外空间复杂度且只扫描遍历一遍数组的算法?

 

 

 

比较容易联想到快排,把所有0扔到1左边,把所有2扔到1右边,问题就在于我们怎样找扔的位置

因为我们不知道1在哪,所以把0扔到最左(left),2扔到最右(right),初始化left=0,right=size()-1

2比较好处理,查到一个2就往最后right扔,扔一次就right--

那么怎么找0该扔到的位置?

有这么几种情况

1、i=left,就是说查到的0就在该在的位置,那么这时候需要i++,left++

2、i!=left,那么这时候就需要交换,交换后left位置为0,所以需要left++

 1 void sortColors(vector<int> &nums) {
 2         // write your code here
 3         int left=0, right=nums.size()-1;
 4         int index=0;
 5         while(index<=right){
 6             if(nums[index]==0){
 7                 if(index==left){
 8                     index++;
 9                 }
10                 else{
11                     swap(nums[index], nums[left]);
12                 }
13                 left++;
14             }
15             else if(nums[index]==2){
16                 swap(nums[index], nums[right]);
17                 right--;
18             }
19             else{
20                 index++;
21             }
22         }
23     }

看的出来,查到1就直接跳过了,只处理查到0和2的情况

转载于:https://www.cnblogs.com/TheLaughingMan/p/8171250.html

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

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

相关文章

vue项目token放在哪里_关于vue动态菜单的那点事

vue-element-admin4.0国内节点访问地址&#xff1a;https://panjiachen.gitee.io/vue-element-admin-site/zh/本此使用的是https://github.com/PanJiaChen/vue-element-admin/tree/i18n 国际化分支的版本。说是除了国际化其他都一样。本文主要介绍前台动态的使用资源权限。后台…

H264学习方法历程资料

我的H.264学习历程 半年前&#xff0c;我知道了H.264这个名词。那个时候决定学习H.264&#xff0c;可是我连资料都不知道如何收集。而且整个学校就只有我一个人在学习H.264&#xff0c; 找不到人交流&#xff0c;所以那个时候学得真的是举步维艰&#xff0c;很痛苦&#xff0c…

深度学习之 ROI Pooling

什么是ROI&#xff1f; ROI是 Region of interest 的简写&#xff0c;指的是 Faster R-CNN 结构中&#xff0c;经过 RPN 层后&#xff0c;产生的 proposal 对应的 box 框。 ROI Pooling 顾名思义&#xff0c;是 pooling 层的一种&#xff0c;而且是针对 ROIs 的 pooling。整个…

KD树小结

很久之前我就想过怎么快速在二维平面上查找一个区域的信息&#xff0c;思考许久无果&#xff0c;只能想到几种优秀一点的暴力。 KD树就是干上面那件事的。 别的不多说&#xff0c;赶紧把自己的理解写下来&#xff0c;免得凉了。 KD树的组成 以维护k维空间(x,y,……)内的KD树为例…

多元函数求极值中的a_多元函数的条件极值和拉格朗日乘数法

、条件极值、拉格朗日乘数法1. 转化为无条件极值在讨论多元函数极值问题时&#xff0c;如果遇到除了在定义域中寻求驻点(可能的极值点)外&#xff0c;对自变量再无别的限制条件&#xff0c;我们称这类问题为函数的无条件极值。如求的极值&#xff0c;就是无条件极值问题。然而在…

深度学习之 RPN(RegionProposal Network)- 区域候选网络

anchor boxes基本概念与作用: feature map 上的一个点可以映射回输入图片上的一个点&#xff0c;以特征图上这个点为中心&#xff0c;预先人为设定 k 个 boxes&#xff0c;这些 boxes 就称为在这个点上生成的 k 个 anchor boxes&#xff08;所有anchor boxes的中心点坐标是一样…

h264的码率控制 JVT-G012

开始看h264的码率控制&#xff0c;很多地方都提到 G012&#xff0c;拿来做为参考比较&#xff0c;看来很有必要研究清楚。 偶这人&#xff0c;E文文档不翻译的话&#xff0c;看过就忘了&#xff0c;于是草草翻译了下&#xff0c;因为不打算做B帧&#xff0c;也不准备在同一帧中…

Android RecyclerView嵌套EditView实时更新Item数据

一、场景&#xff08;例如&#xff1a;购物车&#xff09; 1、当我们需要以列表样式管理某些数据时&#xff0c;可能需要列表项的某个字段可编辑 2、编辑Item上的某个字段后可能还要更新相关字段的值 二、可能遇到的问题 1、列表滑动导致输入框中的数据错位&#xff08;或者焦点…

workbench拓扑优化教程_优化技术在水泵水力设计的应用(上篇)

文章来源&#xff1a;安世亚太官方订阅号&#xff08;搜索&#xff1a;Peraglobal&#xff09;CFD技术在泵的内流数值模拟、研究泵内部流动规律和结构方面已广泛应用&#xff0c;取得了很多成果。但是初步设计的产品如果通过CFD仿真得到的性能曲线不能满足使用要求&#xff0c;…

深度学习之 TensorRT

1 简介 TensorRT是一个高性能的深度学习推理&#xff08;Inference&#xff09;优化器&#xff0c;可以为深度学习应用提供低延迟、高吞吐率的部署推理。TensorRT可用于对超大规模数据中心、嵌入式平台或自动驾驶平台进行推理加速。TensorRT现已能支持TensorFlow、Caffe、Mxne…

H.264笔记

H.264标准写得比较繁复&#xff0c;所以考虑在浏览完Whitepaper之后就开始研读X264代码。X264代码风格还是比较清晰简洁的。根据对标准得理解&#xff0c;Picture Order Count在Slice解码的一开始就被提及&#xff1a;I0 B1 B2 P3 B4 B5 P6I0 P3 B1 B2 P6 B4 B5于是I0的POC是0&…

进制转换中dbho是什么意思_什么是网段?二进制十进制如何互相转换?看完这篇,你就全明白了...

之前的文章讲了ip&#xff0c;子网掩码&#xff0c;网关的关系&#xff0c;今天着重讲一下网段。我们用傻瓜交换机通讯时&#xff0c;一个网段的设备才能互相通讯&#xff0c;怎么能判断两个ip是同一个网段呢&#xff1f;今天就简单的说一下。(这篇文章用语音听可以起到催眠作用…

【网络流24题】星际转移问题(最大流)

【网络流24题】星际转移问题&#xff08;最大流&#xff09; 题面 Cogs 题解 因为天数是未知的&#xff0c;所以我们要想办法处理天数 可以选择二分或者依次累加天数 因为数据范围较小&#xff0c;使用二分可能反而复杂度会增高 所以使用不断累加天数 那么&#xff0c;把所有的…

使用 gunicorn 部署flask项目

1、WSGI协议 Web框架致力于如何生成HTML代码&#xff0c;而Web服务器用于处理和响应HTTP请求。Web框架和Web服务器之间的通信&#xff0c;需要一套双方都遵守的接口协议。WSGI协议就是用来统一这两者的接口的。 2、WSGI容器 常用的WSGI容器有Gunicorn和uWSGI&#xff0c;但G…

软件需求与问题解决

&#xff08;一&#xff09; 小满当上项目经理后不久&#xff0c;参与了一个大项目。当时市场签下来的时候&#xff0c;公司里面是欢天喜地的。项目做了一年多。到了交付的时候&#xff0c;用户却很不满意&#xff0c;当初说好的东西&#xff0c;好多都变了卦。用户是上帝&…

flex 换主轴后子元素占满_Chrome72 嵌套 flex 布局修改,你的网站可能会发生布局错乱...

起源2019 年 1 月 29 日&#xff0c;Chrome72 正式版(72.0.3626.81)发布&#xff0c;本次发布带来了一个改变&#xff0c;且没有在更新日志中提及&#xff0c;该改变导致某些网站发生了布局错乱。该改变主要针对的是嵌套的flex布局&#xff0c;下面我们一起看下是怎么回事。问题…

使用 Django + Wusgi + Nginx 部署 Django

如何在生产上部署Django? Django的部署可以有很多方式&#xff0c;采用 nginxuwsgi 的方式是其中比较常见的一种方式。 uwsgi介绍 uWSGI是一个Web服务器&#xff0c;它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。 WSGI / …

网络学习网址

网络之路博客 http://ccieh3c.com/ 转载于:https://www.cnblogs.com/changha0/p/8179801.html

路由到另外一个页面_Nextjs使用解读一(项目搭建与路由系统)

文章说明&#xff1a;1. 之前想搭建个人博客&#xff0c;由于学习的是react技术栈&#xff0c;所以就到处搜罗资料学了nextjs&#xff0c;配合koa就把博客搭起来了。该系列文章基于我的学习笔记&#xff0c;重新整理了一遍&#xff0c;如果有错误之处&#xff0c;还请指正。2. …

微信获取token -1000

最终翻看微信开发api找到需要去配置IP白名单。只需要配置访问来源IP即可。 转载于:https://www.cnblogs.com/yangjinqiang/p/8184663.html