【剑斩OFFER】算法的暴力美学——颜色分类

一、题目描述

二、算法原理

由题目可知,我们可以把一个数组(无论是什么数组最终的情况)里面的情况分成:

故而,我们可以使用分治的思想来解决这道题:

可以把这个数组分成四个部分:

【0,left】:等于0

【left+1,i -1】:等于1

【i,right - 1】:未知数字(待扫描)

【right,nums.size() -1】:等于2

根据上面这四个部分可以制定处理方法:

当 nums i == 0 时,swap(nums i++ ,nums ++left );

当 nums i == 1 时,i++

当 nums i == 2 时,swap(nums i ,nums -- right ),注意:这里的 i 是不能 ++ 的,因为当他们交换时,nums i 是一个未扫描的数字,所以我们要再扫描一次。

当然一开始 left = -1,i = 0,right = nums.size(),因为我们还没有开始处理数据。

三、代码实现

cpp 复制代码
class Solution {
public:
    void sortColors(vector<int>& nums) {
        int i = 0;
        int left = -1,right = nums.size();
        while(i < right)
        {
            if(nums[i] == 0) swap(nums[i],nums[++left]);
            else if(nums[i] == 2)
            {
                swap(nums[i],nums[--right]);
                continue;//再次扫描未知数据
            }
            i++;
        }
    }
};
相关推荐
BYSJMG18 小时前
计算机毕业设计选题推荐:基于大数据的快递物流运营数据分析与可视化,Spark与K-Means
大数据·算法·数据分析·spark·课程设计
阳明山水18 小时前
因果一致性正则化实战解析
人工智能·深度学习·算法·机器学习·架构
Yunovian19 小时前
AI时代,针对模型与应用,浅谈一下各编程语言
开发语言·c++·人工智能·python·ai·rust·ai编程
黄金龙PLUS19 小时前
5个1024比特大状态置换算法的设计与分析
算法·网络安全·密码学·哈希算法·同态加密
心中有你021420 小时前
C语言埃氏筛法(素数筛选)
c语言·数据结构·算法
Omics Pro21 小时前
Cell封面|衰老生物学开源AI工具包
数据库·人工智能·算法·机器学习·自然语言处理
释厄6231 天前
多黑洞具现论·物理/生物/金融三域显化·虚拟宇宙黑洞·奇点=0 圆圈
开发语言·数据结构·人工智能·程序人生·安全威胁分析
UIU1141 天前
递归算法与汉诺塔
c++·学习·算法·c#·递归
Fruit_Caller1 天前
static
开发语言·c++
用户979984807181 天前
200 行代码写一个能跑的 AI Agent:不依赖任何框架,只靠 tool-calling 原理
算法