【LeetCode】75. 颜色分类,使得相同颜色的元素相邻

   日期:2020-10-13     浏览:93    评论:0    
核心提示:题目地址:https://leetcode-cn.com/problems/sort-colors/题目描述:给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]解题思路:  因为三个颜色的球用0、1、2来标识,按输出0全部排在前面,2全部排在后面,初始化定义两个下标

题目地址:https://leetcode-cn.com/problems/sort-colors/

题目描述:

给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

示例:

输入: [2,0,2,1,1,0]
输出: [0,0,1,1,2,2]

解题思路:

  因为三个颜色的球用0、1、2来标识,按输出0全部排在前面,2全部排在后面,初始化定义两个下标位置min=0,指向最前面的位置,max=nums.length-1,指向数组的最后一个下标。
  通过for循环遍历,如果是0就往前面移位,和min的下标互换,然后min+1,如果是2就往后移位,和max的下标位置互换,然后max-1,下一个2就要往前移,这时候互换位置之后,就需要判断换到当前遍历i的值是不是1了,如果不是1,就要回退i–,再遍历,如果是1就放到这个位置。

class Solution { 
    public void sortColors(int[] nums) { 
        int numLength = nums.length;
        int min = 0, max = numLength -1, temp;

        //如果数组只有0个或1个值,直接返回
        if(numLength <= 1){ 
            return;
        }

       //移动0和2,1不移动
        for(int i = 0; i <= max; ++i){ 
            //如果等于0就放前面
            if(nums[i] == 0){ 
                temp = nums[i];
                nums[i] = nums[min];
                nums[min] = temp;
                min++;
            }
            //等于2就往后面放,交换位置
            if(nums[i] == 2){ 
                temp = nums[i];
                nums[i] = nums[max];
                nums[max] = temp;
                max--;
                //判断交换后的当前i下标的值,只有等于1不移动,回退重新循环当前下标
                if(nums[i] != 1){ 
                    --i;
                }
            }
        }

        //打印输出结果
        for (int i = 0; i < numLength; i++){ 
            System.out.print(nums[i] + " ");
        }
    }
}
public class ColorType_75 { 
    public static void main(String[] args) { 
        int nums[] = { 2,0,2,1,1,0,1,2,0,2,2,1,2,1,0,2,1,2,1,0,2};
        Solution solution = new Solution();
        solution.sortColors(nums);
    }
}

运行结果:
  1 1 1 1 1 1 1 2 2 2 2 2 2 0 0 0 0 0 2 2 2

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服