博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【leetcode】75.Sort Colors
阅读量:5966 次
发布时间:2019-06-19

本文共 1160 字,大约阅读时间需要 3 分钟。

题目说明

给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

解法1

时间复杂度:O(n)

空间复杂度:O(1)
思路:使用计数排序法,先遍历一遍统计出各个颜色的个数,然后再遍历第二遍,按指定顺序赋值。

void sortColors(vector
& nums) { int count0 = 0,count1 = 0, count2 = 0; for (int i = 0; i < nums.size(); i ++) { if (nums[i] == 0) count0 ++; else if (nums[i] == 1) count1 ++; else if (nums[i] == 2) count2 ++; } for (int i = 0; i < nums.size(); i ++) { if (i < count0) nums[i] = 0; else if ( i < count0 + count1) nums[i] = 1; else nums[i] = 2; }}

解法2

时间复杂度:O(n)

空间复杂度:O(1)
思路:桶排序,建立数组来记录各个数值的个数,数组的下标即数值,数组中各个元素即相应的个数。第一次循环,将记录装入数组,第二次循环,将数组依次放入待排序数组之中。即完成排序。
比第一种解法更具拓展性。

void sortColors(vector
& nums) { int count[3] = {0}; for (int i = 0; i < nums.size(); i ++) { count[nums[i]] ++; } int j = 0; for (int i = 0; i < nums.size();) { if (count[j]-- > 0) { nums[i++] = j; } else j ++;//下一个桶 }}

转载于:https://www.cnblogs.com/JesseTsou/p/10322351.html

你可能感兴趣的文章
交互设计[3]--点石成金
查看>>
java实现双向循环链表
查看>>
如何使用缓存提高程序性能
查看>>
【trie树】HDU4825 Xor Sum
查看>>
SCCM TP4部署Office2013
查看>>
Linux系统启动过程,grub重装。
查看>>
使用Putty密钥认证机制远程登录Linux
查看>>
【博客话题】技术人生之三界修炼
查看>>
Ext JS 6开发实例(三) :主界面设计
查看>>
【原创】Oracle RAC原理和安装
查看>>
东哥读书小记 之 《MacTalk人生元编程》
查看>>
《随机出题软件》&《随机分队软件》源码(Windows API)
查看>>
python 文件及文件夹操作
查看>>
Android自定义ListView的Item无法响应OnItemClick的解决办法
查看>>
Building Apps for Windows Phone 8.1教程下载地址整理
查看>>
移动Web—CSS为Retina屏幕替换更高质量的图片
查看>>
[Linux 性能检测工具]SAR
查看>>
JS 运行、复制、另存为 代码。
查看>>
一个经典编程面试题的“隐退”
查看>>
阿里公共DNS 正式发布了
查看>>