当前位置:网站首页>【LeetCode-75】 颜色分类
【LeetCode-75】 颜色分类
2022-08-11 05:30:00 【Ring*】
6.14 颜色分类【75】
6.14.1 题目描述
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
必须在不使用库的sort函数的情况下解决这个问题。
6.14.2 方法一:单指针
思路与算法

class Solution {
public void sortColors(int[] nums) {
int n = nums.length;
int ptr = 0;
for (int i = 0; i < n; ++i) {
if (nums[i] == 0) {
int temp = nums[i];
nums[i] = nums[ptr];
nums[ptr] = temp;
++ptr;
}
}
for (int i = ptr; i < n; ++i) {
if (nums[i] == 1) {
int temp = nums[i];
nums[i] = nums[ptr];
nums[ptr] = temp;
++ptr;
}
}
}
}
复杂度分析
- 时间复杂度:O(n),其中 n 是数组 nums 的长度。
- 空间复杂度:O(1)。
6.14.3 方法二:双指针
思路与算法
class Solution {
public void sortColors(int[] nums) {
int n = nums.length;
int p0 = 0, p1 = 0;
for (int i = 0; i < n; ++i) {
if (nums[i] == 1) {
int temp = nums[i];
nums[i] = nums[p1];
nums[p1] = temp;
++p1;
} else if (nums[i] == 0) {
int temp = nums[i];
nums[i] = nums[p0];
nums[p0] = temp;
if (p0 < p1) {
temp = nums[i];
nums[i] = nums[p1];
nums[p1] = temp;
}
++p0;
++p1;
}
}
}
}
复杂度分析
- 时间复杂度:O(n),其中 n 是数组 nums 的长度。
- 空间复杂度:O(1)。
6.14.4 方法三:双指针
思路与算法
class Solution {
public void sortColors(int[] nums) {
int n = nums.length;
int p0 = 0, p2 = n - 1;
for (int i = 0; i <= p2; ++i) {
while (i <= p2 && nums[i] == 2) {
int temp = nums[i];
nums[i] = nums[p2];
nums[p2] = temp;
--p2;
}
if (nums[i] == 0) {
int temp = nums[i];
nums[i] = nums[p0];
nums[p0] = temp;
++p0;
}
}
}
}
复杂度分析
- 时间复杂度:O(n),其中 n 是数组 nums 的长度。
- 空间复杂度:O(1)。
6.14.5 my answer—统计0 1 2的个数
class Solution {
public void sortColors(int[] nums) {
List<Integer> list0 = new ArrayList<>();
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
for (int num : nums) {
if(num==0)list0.add(num);
if(num==1)list1.add(num);
if(num==2)list2.add(num);
}
for (int i = 0; i < nums.length; i++) {
if (i<list0.size())nums[i]=0;
else if(i<list0.size()+list1.size())nums[i]=1;
else nums[i]=2;
}
}
}
边栏推荐
猜你喜欢
随机推荐
js 学习进阶(事件高级 pink老师教学笔记)
构建面向特征工程的数据生态 ——拥抱开源生态,OpenMLDB全面打通MLOps生态工具链
星盟-pwn-fog
Dark Horse Event Project
Intelligent risk control China design and fall to the ground
PAT乙级刷题之路
Node stepping on the pit 80 port is occupied
js learning advanced (event senior pink teacher teaching notes)
IndexError: index 9 is out of bounds for axis 0 with size 9;数组下标溢出问题
OpenMLDB v0.5.0 released | Performance, cost, flexibility reach new heights
OpenMLDB Meetup No.2 会议纪要
OpenMLDB Pulsar Connector:高效打通实时数据到特征工程
智能风控中台设计与落地
Js method commonly used objects and attributes
将一个excel文件中多个sheet页“拆分“成多个“独立“excel文件
C语言-6月12日-字符替换问题,将一个‘ ’替换为2个‘#’
星盟-pwn-babyfmt
详解程序执行过程
Interpretation of the paper: GAN and detection network multi-task/SOD-MTGAN: Small Object Detection via Multi-Task Generative Adversarial Network
Minutes of OpenMLDB Meetup No.2









