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);
}
}
Leetcode--75. 颜色分类相关推荐
- LeetCode - 75 颜色分类
给定一个包含红色.白色和蓝色.共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列.我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色. ...
- leetcode —— 75. 颜色分类
给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色. ...
- LeetCode 75. 颜色分类(Sort Colors)
题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色 ...
- Leetcode 75. 颜色分类 (每日一题 20210817)
给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列.此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色.示例 ...
- leetcode 75. 颜色分类(双指针)
给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色. ...
- LeetCode 75 颜色分类
题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色 的元素相邻,并按照红色.白色.蓝色顺序排列.此题中,我们使用整数 0. 1 和 2 分别表示红色.白色 ...
- Leetcode算法Java全解答--75. 颜色分类
Leetcode算法Java全解答–75. 颜色分类 文章目录 Leetcode算法Java全解答--75. 颜色分类 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 给定 ...
- 【leetcode】75.颜色分类(多种解法,超详细图文解析)
75. 颜色分类 难度中等 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,**原地**对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 ...
- 75. 颜色分类(C++实现)
文章目录 题目 思路--三指针 题目 题目链接:75. 颜色分类) 思路–三指针 其实颜色分类就是对 0 1 2 这三个数字进行排序,但是排序都是有效率之分的,我们希望可以通过一种高效的方法去排序这三 ...
- 2021.1.9每日复习 75.颜色分类(复习快速排序)+ 77.组合(回溯算法)
***75.颜色分类(复习快速排序) class Solution {public void sortColors(int[] nums) {//方法一:冒泡排序// int n = nums.len ...
最新文章
- JDK/Dubbo/Spring 三种 SPI 机制,谁更好?
- Dynamics 365新功能:可编辑的网格(行内编辑)
- 用JavaScript玩转计算机图形学(二)基本光源
- 活动结束|金融圈第19期分享:数据系统如何防范金融非统性风险?
- svn外网虚拟服务器设置,svn虚拟服务器设置路由器设置
- rocketmq 几种队列_进阶必看的 RocketMQ ,就这篇了
- SpaceX载人龙飞船意外爆炸,据称几乎被完全摧毁
- 使用python读取txt坐标文件生成挖空地块_批量
- 2011通信展:应用为王 国内3G终端企业集体发力
- 在Word2007文档中创建数学公式——使用Word公式编辑器
- 武汉Web前端开发薪水没有别人高?先弄明白这4点
- 如何防止域名被劫持?网站域名被劫持怎么办?怎么处理?
- 可编程计算机边长计算器,可编程科学计算器(Scientific Calculator Plus)
- ORACLE中triggers灰色的,Oracle之Triggers学习与测试_20091229
- 钱多多第二阶段冲刺07
- python requests+unittest+beautifulreport+jenkins实现接口自动化(中)
- Android多国语言翻译 字符串目录详解
- 近两年利用毫米波雷达生成的三维点云进行轨迹追踪相关文献
- 基于Layui上传组件(upload)的动态增加上传组件并使得每个上传组件都可独立上传
- linux 装Broadcom原生网卡
热门文章
- LeetCode 1128. 等价多米诺骨牌对的数量(哈希)
- 用python解决生活问题_Python解决生活问题之闹钟程序的实现
- python使方法执行10次_Python提升程序性能的七个手段
- 怎么读取matlab程序包,Nifti程序包,用于写入,读取和处理医学影像,适用于MATLAB
- php获取当前世界,php获取网站alexa世界流量排名代码
- winform响应时间最长是多少分钟_当詹姆斯退役时,他的总出场时间会达到多少分钟?...
- 推荐一个可交互的 Attention 可视化工具!我的Transformer可解释性有救啦?
- 超硬核 ICML’21 | 如何使自然语言生成提速五倍,且显存占用减低99%
- 从信息检索顶会CIKM'20看搜索、推荐与计算广告新进展
- OpenTSDB 造成 Hbase 整点压力过大问题的排查和解决