Color Sort
2015-07-29 09:22
316 查看
问题描述
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.
解决思路
1. 计数排序;
2. 双指针法,一遍扫描;
程序
1. 普通版本
2. 精炼版本
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.
解决思路
1. 计数排序;
2. 双指针法,一遍扫描;
程序
1. 普通版本
public class Solution { public void sortColors(int[] nums) { if (nums == null || nums.length == 0) { return ; } int begin = 0, end = nums.length - 1; while (true) { while (begin < end && nums[begin] == 0) { ++begin; } while (end > begin && nums[end] == 2) { --end; } if (begin >= end) { break ; } int p = end; while (p >= begin && nums[p] == 1) { --p; } if (p < begin) { break; } if (nums[p] == 0) { swap(nums, p, begin); } else { swap(nums, p, end); } } } private void swap(int[] nums, int i, int j) { int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; } }
2. 精炼版本
public class Solution { public void sortColors(int[] nums) { if (nums == null || nums.length == 0) { return ; } int begin = 0, end = nums.length; for (int i = 0; i < end; i++) { if (nums[i] == 0) { swap(nums, i, begin); ++begin; } else if (nums[i] == 2) { --end; swap(nums, i, end); --i; // 交换前面的元素不确定为0或者1 } } } private void swap(int[] nums, int i, int j) { int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; } }
相关文章推荐
- Excel柱形图填充
- serialization DEMO
- zf-中间库(xzfw_xzjc_jianshi)
- 面试题29_数组中出现次数超过一半的数字
- 如何更改linux文件的拥有者及用户组(chown和chgrp)
- Apache Shiro示例
- hd1272 小希的迷宫
- 欧盟部分国家税收情况
- Strace 调试程序
- Spring MVC(总结)
- linux命令备忘 ulimit 常见服务的启动
- Javascript、Jquery获取浏览器和屏幕各种高度宽度
- struts2 环境配置
- UVA 10250 The Other Two Trees
- 软件测试判断题总结
- H264 Intro - CBP (code block pattern)
- poj-2586 Y2K Accounting Bug
- 暑假- Trie树-(E - Remember the Word)
- MTK 平台手势唤醒功能
- Struts2从一个action转到另一个action的两种方法