LeetCode第75题颜色分类

继续打卡算法题,今天学习的是LeetCode第75题颜色分类,这道题目是道中等题。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码思维和编码能力有一些提升。

分析一波题目

看完题目就知道,其实本题是排序题,本题就是要对数组从小到大排序。

常见的排序算法有冒泡排序,快速排序,归并排序。 而本题数组元素是特殊的,只有可能是0,1,2, 所以可以不按排序法解决,很多重复元素。

我们可以循环一遍数组将0移动到数组头部,同时记录0的最终位置。

再循环一遍将1移动到数组中间,这样数组就排序了。

时间复杂度O(n^2)。

哈哈,还有一种更加巧妙的办法,那就是双指针法,我们可以使用两个指针p0,p1分别用来交换0和2的

一开始,p0指向数组下标0 ,p1指向数组下标n-1

然后遍历数组,遇到了0,将0移动到p0位置,将p0指针往后移动,遇到了2,将p1指向往前移动

本题解题技巧

1、根据数组中只有0,1,2的情况,使用两个指针处理0和1的元素,巧妙的解决此题

编码解决

java 复制代码
class Solution {
    public void sortColors(int[] nums) {
        int n = nums.length;
        int p0 = 0, p2 = n - 1;
        for (int i = 0; i <= p2; ++i) {
            
            while (i <= p2 && nums[i] == 2) {
                int temp = nums[i];
                nums[i] = nums[p2];
                nums[p2] = temp;
                --p2;
            }
            if (nums[i] == 0) {
                int temp = nums[i];
                nums[i] = nums[p0];
                nums[p0] = temp;
                ++p0;
            }
        }
    }
}

总结

1、双指针法遍历数组很有用,

相关推荐
haaaaaaarry19 分钟前
【分治法】线性时间选择问题
数据结构·算法
CS创新实验室28 分钟前
计算机考研之数据结构:P 问题和 NP 问题
数据结构·考研·算法
OTWOL1 小时前
【C++编程入门基础(一)】
c++·算法
后端码匠1 小时前
Spring Boot3+Vue2极速整合:10分钟搭建DeepSeek AI对话系统
人工智能·spring boot·后端
谏君之1 小时前
C语言实现的常见算法示例
c语言·算法·排序算法
可乐张1 小时前
AutoGen 技术博客系列 (九):从 v0.2 到 v0.4 的迁移指南
后端·llm
可乐张1 小时前
AutoGen 技术博客系列 (八):深入剖析 Swarm—— 智能体协作的新范式
后端·llm
计算机-秋大田1 小时前
基于Spring Boot的农产品智慧物流系统设计与实现(LW+源码+讲解)
java·开发语言·spring boot·后端·spring·课程设计
计算机毕设指导62 小时前
基于SpringBoot的城乡商城协作系统【附源码】
java·spring boot·后端·mysql·spring·tomcat·maven
华子w9089258592 小时前
基于数据可视化+SpringBoot+安卓端的数字化施工项目计划与管理平台设计和实现
java·spring boot·后端