LeetCode(C语言) - 75. 颜色分类
https://leetcode.cn/problems/sort-colors/
提交代码1
void sortColors(int* nums, int numsSize){
int a=0,b=0,c=0,i;
for(i=0;i<numsSize;i++){
if(nums[i]==0){
a++;
}else if(nums[i]==1){
b++;
}else if(nums[i]==2){
c++;
}
}
for(i=0;i<a;i++){
nums[i]=0;
}
for(i=a;i<a+b;i++){
nums[i]=1;
}
for(i=a+b;i<a+b+c;i++){
nums[i]=2;
}
}
执行结果
执行结果:
通过
显示详情
添加备注
执行用时:
0 ms
, 在所有 C 提交中击败了
100.00%
的用户
内存消耗:
6 MB
, 在所有 C 提交中击败了
26.90%
的用户
通过测试用例:
87 / 87
完整代码
#include <stdio.h>
void sortColors(int* nums, int numsSize){
int a=0,b=0,c=0,i;
for(i=0;i<numsSize;i++){
if(nums[i]==0){
a++;
}else if(nums[i]==1){
b++;
}else if(nums[i]==2){
c++;
}
}
for(i=0;i<a;i++){
nums[i]=0;
}
for(i=a;i<a+b;i++){
nums[i]=1;
}
for(i=a+b;i<a+b+c;i++){
nums[i]=2;
}
}
main(){
// int a[] = {2,0,2,1,1,0};
int a[] = {2,0,1};
int len = sizeof (a) / sizeof (int);
for(int i=0;i<len;i++){
printf("%d ",a[i]);
}
printf("\n");
sortColors(a,len);
for(int i=0;i<len;i++){
printf("%d ",a[i]);
}
printf("\n");
}
控制台输出
2 0 1
0 1 2
--------------------------------
Process exited after 0.5431 seconds with return value 0
请按任意键继续. . .
提交代码2:三路快排
思路:三路快排,这样优化的结果是,循环只走一遍就可以了。代码1需要走两遍循环。
三路快排学习:https://www.bilibili.com/video/BV1Kr4y187VP/
void sortColors(int* nums, int numsSize){
int left=0,right=numsSize-1,i=0;
while(i<=right){
if(nums[i]==0){
nums[i]=nums[left];
nums[left] =0;
i++;
left++;
}else if(nums[i]==1){
i++;
}else if(nums[i]==2){
nums[i]=nums[right];
nums[right] = 2;
right--;
}
}
}
执行结果
执行结果:
通过
显示详情
添加备注
执行用时:
4 ms
, 在所有 C 提交中击败了
58.65%
的用户
内存消耗:
6 MB
, 在所有 C 提交中击败了
21.43%
的用户
通过测试用例:
87 / 87
浙公网安备 33010602011771号