LintCode_颜色分类
来源:互联网 发布:js 获取event对象 编辑:程序博客网 时间:2024/06/05 09:50
问题描述:
算法描述:
根据上面的说明,我设计了两种算法,第一种遍历两次,第二种只遍历一次
方法一:
public static void sortColors1(int[] nums) { if(nums!=null&&nums.length!=0){ int size=nums.length; int[] count=new int[3]; int pos=0; //统计0,1,2的个数 for(int i=0;i<size;i++){ if(nums[i]==0){ count[0]++; }else if(nums[i]==1){ count[1]++; }else if(nums[i]==2){ count[2]++; } } //再遍历一次数组,改变nums for(int j=0;j<count.length;j++){ while(count[j]!=0){ nums[pos]=j; pos++; count[j]--; } } }// for(int k:nums){// System.out.print(k+" ");// } }
方法二:
public static void sortColors(int[] nums) { if(nums!=null&&nums.length!=0){ //记录0和2的位置 int pos=0; //nums的长度 int size=nums.length; //记录已检测到的2的个数,这个在将2插入到最后有很大作用,以免陷入死循环 int count2=0; //起到一个标记作用,主要是在将待插的2后面有0或者2,这样当后面的数往前移一位了,但i++,这样可能跳过了移位后待插处的0或者2; int flag2=0; for(int i=0;i<size-count2;i++){ if(nums[i]==0){ pos=i; while(pos>0){ //遇到0,则把0前面的数往后移,然后将0插入到数组第一个 nums[pos]=nums[pos-1]; pos--; } nums[pos]=0; }else if(nums[i]==2){ pos=i; count2++; flag2=2; while(pos<size-1){ //遇到2,则把2后面的数往后移,然后将2插入到数组最后一个 nums[pos]=nums[pos+1]; pos++; } nums[pos]=2; } if(flag2==2&&(nums[i]==0||nums[i]==2)&&i<size-count2){ i--; flag2=0; } } } }
0 0
- LintCode_颜色分类
- 颜色分类
- 颜色分类
- 颜色分类
- 颜色分类
- 颜色分类
- 颜色分类
- LintCode_中位数
- 颜色分类明细列表
- 颜色空间及分类
- 颜色空间分类
- LintCode-颜色分类
- lintcode-颜色分类-148
- Lintcode: 颜色分类
- 【Lintcode】颜色分类
- LintCode:颜色分类
- Java实现-颜色分类
- lintcode--颜色分类
- IO流--读取键盘录入(流转换和流的操作规律)
- 相对路径和绝对路径的区别
- web端开发之缓存技术
- Map拷贝 关于对象深拷贝 浅拷贝的问题
- iOS系统的单例类
- LintCode_颜色分类
- Caffe C++API 提取任意一张图片的特征系列一----ImageData
- Servlet及HttpServlet源码
- This project has the JPA facet, but no JPA project could be created.
- 更改Xcode项目名及app名称
- 图片存储带沙盒路径
- Android全局捕获异常
- oracle 11g em 乱码
- 黑马程序员-Java的数组(由基本类型构成)和算法