leetcode 75.颜色分类 Java

    科技2024-11-27  43

    颜色分类

    题目链接描述示例初始代码模板代码

    题目链接

    https://leetcode-cn.com/problems/sort-colors/

    描述

    给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 012 分别表示红色、白色和蓝色。 注意: 不能使用代码库中的排序函数来解决这道题。 进阶: 一个直观的解决方案是使用计数排序的两趟扫描算法。 首先,迭代计算出012 元素的个数,然后按照012的排序,重写当前数组。 你能想出一个仅使用常数空间的一趟扫描算法吗?

    示例

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

    初始代码模板

    class Solution { public void sortColors(int[] nums) { } }

    代码

    双指针,一个指针指向左边,一个指针指向右边,从左到右遍历元素,等于0放左,移动左指针,等于2放右,移动右指针,当遍历到右指针时停止

    class Solution { public void sortColors(int[] nums) { int left = 0; int right = nums.length - 1; int cur = 0; while (cur <= right) { while (nums[cur] == 2 && cur <= right) { swap(nums, cur, right); right--; } while (nums[cur] == 0 && cur >= left) { swap(nums, left, cur); left++; } cur++; } } private void swap(int[] nums, int a, int b) { int temp = nums[a]; nums[a] = nums[b]; nums[b] = temp; } }
    Processed: 0.011, SQL: 8