Sort Colors
2015-11-04 15:36
399 查看
Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue. Here, we will use the integers 0, 1, and 2 to represent the color red, white, and blue respectively. Note: You are not suppose to use the library's sort function for this problem. click to show follow up. Follow up: A rather straight forward solution is a two-pass algorithm using counting sort. First, iterate the array counting number of 0's, 1's, and 2's, then overwrite array with total number of 0's, then 1's and followed by 2's. Could you come up with an one-pass algorithm using only constant space? Subscribe to see which companies asked this question
题目中说了一种方法,数出每种颜色的个数,然后直接覆盖就行,只是需要两次循环。要在一次循环中完成,我们设置两个边界,l和r,遇到0就和l值交换,遇到2就和r值交换,遇到1则不进行任何操作。要注意的是r–的同时要i–,因为交换过来的值可能出现0,因此要重新检测。代码如下:
class Solution { public: void sortColors(vector<int>& nums) { int l=0, r=nums.size()-1; for(int i=l;i<=r;i++){ if(nums[i]==0){ int tmp=nums[i]; nums[i]=nums[l]; nums[l]=tmp; l++; } if(nums[i]==2){ int tmp=nums[i]; nums[i]=nums[r]; nums[r]=tmp; r--; i--; } } } };
还有一种平移插入的方法。代码如下:
public void sortColors(int[] A) { int i=-1, j=-1, k=-1; for(int p = 0; p < A.length; p++) { if(A[p] == 0) { A[++k]=2; A[++j]=1; A[++i]=0; } else if (A[p] == 1) { A[++k]=2; A[++j]=1; } else if (A[p] == 2) { A[++k]=2; } } }
相关文章推荐
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- javascript数组操作总结和属性、方法介绍
- mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
- JavaScript Array扩展实现代码
- JavaScript之数组(Array)详解
- C#中Array与ArrayList用法及转换的方法
- Array栈方法和队列方法的特点说明
- Array.prototype.slice 使用扩展
- Array, Array Constructor, for in loop, typeof, instanceOf
- 实例详解ECMAScript5中新增的Array方法
- js Array的用法总结
- JavaScript 判断判断某个对象是Object还是一个Array
- Javascript中的Array数组对象详谈
- js模拟实现Array的sort方法
- 在javascript将NodeList作为Array数组处理的方法
- PHP array_multisort()函数的使用札记
- PHP中array_merge和array相加的区别分析
- Sorting Array Values in PHP(数组排序)
- 深入array multisort排序原理的详解
- Array 重排序方法和操作方法的简单实例