力扣算法Hot100——75. 颜色分类

解法1: 当然可以冒泡排序,时间复杂度O( n 2 n^2 n2)

解法2:单指针

循环两次,第一次循环将所有的 0 交换到前面;

第二次循环将所有的 1 交换到 0 的后面

java 复制代码
class Solution {
    public void sortColorsBySinglePointer(int[] nums) {
        int zeroCnt = 0, p = 0;
        for (int i = 0; i < nums.length ; i++) {
            if (nums[i] == 0) {
                p = nums[zeroCnt];
                nums[zeroCnt] = 0;             
                nums[i] = p;
                zeroCnt++;
            }
        }
        // 继续沿着zeroCnt的位置放 1
        for (int i = 0; i < nums.length ; i++) {
            if (nums[i] == 1) {
                p = nums[zeroCnt];
                nums[zeroCnt] = 1;
                nums[i] = p;
                zeroCnt++;
            }
        }
    }
}

解法3:双指针

使用一次循环,过程中使用两个指针,将所有的 0 放前面,所有的 2 放后面

或者将所有的 0 放前面,所有的 1 放 0 后面

相关推荐
gfdhy6 小时前
【c++】哈希算法深度解析:实现、核心作用与工业级应用
c语言·开发语言·c++·算法·密码学·哈希算法·哈希
闲人编程6 小时前
Python的导入系统:模块查找、加载和缓存机制
java·python·缓存·加载器·codecapsule·查找器
百***06016 小时前
SpringMVC 请求参数接收
前端·javascript·算法
故渊ZY6 小时前
Java 代理模式:从原理到实战的全方位解析
java·开发语言·架构
匿者 衍6 小时前
POI读取 excel 嵌入式图片(支持wps 和 office)
java·excel
一个尚在学习的计算机小白7 小时前
java集合
java·开发语言
IUGEI7 小时前
synchronized的工作机制是怎样的?深入解析synchronized底层原理
java·开发语言·后端·c#
q***13617 小时前
Windows操作系统部署Tomcat详细讲解
java·windows·tomcat
z***I3947 小时前
Java桌面应用案例
java·开发语言
r***12387 小时前
SpringBoot最佳实践之 - 使用AOP记录操作日志
java·spring boot·后端