Leetcode JAVA刷刷站(75)颜色分类

一、题目概述

二、思路方向

在Java中,要实现这个排序算法,我们可以使用三指针的方法,也称作荷兰国旗问题(Dutch National Flag Problem)。这个方法使用三个指针来分别追踪数组中小于、等于和大于中间值的元素的边界。在这个特定的问题中,中间值是1(代表白色),但我们实际上更关心的是将0(红色)放在前面,将2(蓝色)放在后面,而1(白色)则位于中间。

三、代码实现

java 复制代码
public class Solution {  
    public void sortColors(int[] nums) {  
        if (nums == null || nums.length <= 1) {  
            return;  
        }  
  
        int low = 0; // 小于中间值的指针  
        int mid = 0; // 当前遍历的指针  
        int high = nums.length - 1; // 大于中间值的指针  
  
        while (mid <= high) {  
            if (nums[mid] == 0) {  
                // 如果当前元素是0,则与low指向的元素交换,并将两个指针都向前移动  
                swap(nums, low, mid);  
                low++;  
                mid++;  
            } else if (nums[mid] == 1) {  
                // 如果当前元素是1,则只将mid指针向前移动  
                mid++;  
            } else { // nums[mid] == 2  
                // 如果当前元素是2,则与high指向的元素交换,但只将high指针向后移动  
                swap(nums, mid, high);  
                high--;  
            }  
        }  
    }  
  
    // 交换数组中两个位置的值  
    private void swap(int[] nums, int i, int j) {  
        int temp = nums[i];  
        nums[i] = nums[j];  
        nums[j] = temp;  
    }  
  
    public static void main(String[] args) {  
        Solution solution = new Solution();  
        int[] nums = {2, 0, 2, 1, 1, 0};  
        solution.sortColors(nums);  
        for (int num : nums) {  
            System.out.print(num + " ");  
        }  
    }  
}

执行结果:

四、小结

在这个代码中,low 指针用于追踪所有小于1(即0)的元素的边界,mid 指针用于遍历数组,high 指针用于追踪所有大于1(即2)的元素的边界。当mid指针遇到0时,它与low指针交换,并将两个指针都向前移动;当mid指针遇到1时,它只向前移动;当mid指针遇到2时,它与high指针交换,但只将high指针向后移动。这个过程一直持续到mid指针超过high指针为止,此时数组就被排序好了。

结语

谁勇敢地经受过青春之火的洗礼

谁就毫不惧怕晚年的严寒冰霜

!!!

相关推荐
橙露3 分钟前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot
晚霞的不甘3 分钟前
Flutter for OpenHarmony 可视化教学:A* 寻路算法的交互式演示
人工智能·算法·flutter·架构·开源·音视频
小程故事多_804 分钟前
Agent Infra核心技术解析:Sandbox sandbox技术原理、选型逻辑与主流方案全景
java·开发语言·人工智能·aigc
冰暮流星4 分钟前
sql语言之分组语句group by
java·数据库·sql
望舒5136 分钟前
代码随想录day25,回溯算法part4
java·数据结构·算法·leetcode
黎雁·泠崖8 分钟前
【魔法森林冒险】3/14 Allen类(一):主角核心属性与初始化
java·开发语言
黎雁·泠崖12 分钟前
【魔法森林冒险】1/14 项目总览:用Java打造你的第一个回合制冒险游戏
java·开发语言
NuageL19 分钟前
原始Json字符串转化为Java对象列表/把中文键名变成英文键名
java·spring boot·json
C++ 老炮儿的技术栈22 分钟前
Qt 编写 TcpClient 程序 详细步骤
c语言·开发语言·数据库·c++·qt·算法
KYGALYX26 分钟前
逻辑回归详解
算法·机器学习·逻辑回归