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

来源:互联网 发布:瑞中数据官网 编辑:程序博客网 时间:2024/06/02 00:32

给定一个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("您输入的数组的数据有误!!!");                }            }        }    }}


阅读全文
0 0
原创粉丝点击