leetcode刷题记录(九十七)——75. 颜色分类

(一)问题描述

75. 颜色分类 - 力扣(LeetCode)75. 颜色分类 - 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地 [https://baike.baidu.com/item/%E5%8E%9F%E5%9C%B0%E7%AE%97%E6%B3%95] 对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。必须在不使用库内置的 sort 函数的情况下解决这个问题。 示例 1:输入:nums = [2,0,2,1,1,0]输出:[0,0,1,1,2,2]示例 2:输入:nums = [2,0,1]输出:[0,1,2] 提示: * n == nums.length * 1 <= n <= 300 * nums[i] 为 0、1 或 2 进阶: * 你能想出一个仅使用常数空间的一趟扫描算法吗?https://leetcode.cn/problems/sort-colors/description/?envType=study-plan-v2&envId=top-100-liked

给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地 对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

    必须在不使用库内置的 sort 函数的情况下解决这个问题。

    示例 1:

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

    示例 2:

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

    提示:

    • n == nums.length
    • 1 <= n <= 300
    • nums[i] 为 01 或 2

    进阶:

    • 你能想出一个仅使用常数空间的一趟扫描算法吗?

     (二)解决思路

            用两个指针将0和1换到合适的位置上。指针p0和p1初始位于nums[0],遍历数组中的元素,当遇到0时,就和p0交换,随后p0和p1都向后移动一位(p0的位置已经放好0了,这里不可能再放1了,1应该在这个位置后面,所以p1也要向后移动一位);遇到1时,就和p1交换,随后p1向后移动一位。

            这里需要注意的是,当p0

    class Solution {
        public void sortColors(int[] nums) {
            int p0=0,p1=0;
            for(int i=0;i

    你可能感兴趣的:(leetcode刷题记录,leetcode,算法,职场和发展,数据结构,java)