zoukankan      html  css  js  c++  java
  • LeetCode~75.颜色分类

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

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

    注意:
    不能使用代码库中的排序函数来解决这道题。

    示例:

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

    进阶:

    一个直观的解决方案是使用计数排序的两趟扫描算法。
    首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2的排序,重写当前数组。
    你能想出一个仅使用常数空间的一趟扫描算法吗?
    

    个人思路解析

    class Solution {
        public void sortColors(int[] nums) {
            // 定义三个指针,一个临时变量
            int one = 0, two = 0, three = nums.length - 1,temp = 0;
    		
            // 当two大于three时表示遍历结束
            while(two <= three){
                // 判断two处元素是否为0,如果为0,则与one处元素交换
                if(nums[two] == 0){
                    temp = nums[two];
                    nums[two++] = nums[one];	// 交换完毕同时后移一位
                    nums[one++] = temp;
                // 判断two处元素是否为2,如果为2,则与three处元素交换
                }else if(nums[two] == 2){
                    temp = nums[three];
                    nums[three--] = nums[two];	// three前移,two不发送变化,继续判断当前元素
                    nums[two] = temp;
                }else{
                    // 为1则后移一位
                    two++;
                }
            }
        }
    }
    

    提交结果

    75.颜色分类

    来源:力扣(LeetCode)
    链接: https://leetcode-cn.com/problems/sort-colors/

  • 相关阅读:
    让用户打开你app的位置功能
    函数递归与栈的关系
    公务员考试
    毕达哥拉斯的故事
    OC5_NSMutableString操作
    OC4_NSString操作
    OC_NSString
    OC3_MyRect
    OC6_类方法
    OC5_构造方法与self指针
  • 原文地址:https://www.cnblogs.com/unrecognized/p/12577444.html
Copyright © 2011-2022 走看看