您的位置:首页 > 编程语言 > Java开发

在这里,我们将使用0,1和2的整数分别表示红色,白色和蓝色。将所有的0,1,2元素进行排序

2017-10-22 17:24 357 查看
给定一个n个对象颜色为红色,白色或蓝色的数组,对其进行排序,使相同颜色的对象相邻,颜色为红色,白色和蓝色。

在这里,我们将使用0,1和2的整数分别表示红色,白色和蓝色。

优化前的思路及代码:

class Solution {
public void sortColors(int[] nums) {
//时间复杂度:O(n)空间复杂度:O(1)
int[] count = {0,0,0};//存放0,1,2三个元素的出现频率

for(int num : nums){
if(num >= 0 && num <= 2)//确保数组中元素的值都为0,1,2
count[num]++;
else
System.out.println("您输入的数组元素有误");
}

int index = 0;//原来数组的下标,重新排序
int j = 0;//数组中的元素
while(j < count.length){

for(int i = 0;i<count[j];i++){
nums[index++] = j;
}
j++;
}

}
}参考三路快排后的思路及代码:

class Solution {
public void sortColors(int[] nums) {
//时间复杂度:O(n)空间复杂度:O(1)[只遍历一遍完成题目的要求]
int zero = -1;          //nums[0...zero] == 0;
int two = nums.length;  //nums[two,n-1] == 2;

for(int i = 0;i < two;){
if(nums[i]==1) {
i++;
}else if(nums[i] == 2) {
//two--;
int temp = nums[i];
nums[i] = nums[--two];
nums[two] = temp;
}else {
if(nums[i] == 0){
//zero++;
int tmp = nums[++zero];
nums[zero] = nums[i];
nums[i] = tmp;
i++;

}else{
System.out.println("您输入的数组的数据有误!!!");
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java
相关文章推荐