首页 > 其他分享 >75. 颜色分类

75. 颜色分类

时间:2024-11-11 10:10:20浏览次数:4  
标签:right 颜色 nums ++ 分类 75 红色 border left

  1. 题目链接

  2. 这就是「荷兰国旗」问题,把颜色分成左边红色、中间白色、右边蓝色的顺序,实现快排的一部分步骤。

  3. 解题思路

    • 我们可以有一个left_border变量,表示[0, left_border]都是红色,同时,一个right_border变量,[right_border, n - 1]都是蓝色,那么[left_border + 1, right_border - 1]就是白色了。
    • 初始的时候,left_border = -1,表示还没有红色的,right_border = n,表示没有蓝色的。
    • 我们从左往右遍历
      • 如果i是白色,则啥也不干,i++
      • 如果是红色,我们要「发货」到红色区域,还记得红色区域的位置吗?[0, left_border],现在红色区域要多一个数,我们放在哪?放在left_border+1的位置,同时left_border++,表示红色区域扩大了。那么原来left_border+1的值怎么办?放到i位置。放过来之后呢?这个数需要处理吗?不需要,因为在操作之前[0, left_border]是红色,[left_border + 1, i - 1]是白色,所以left_border + 1本来就是白色的。
        • 总结一遍,如果i是红色,则swap(i, left_border + 1),交换位置,同时left_border++,同时i++
      • 如果是蓝色呢?我们要「发货」到蓝色区域[right_border, n - 1], 发货到right_border - 1,同时right_border--表示蓝色区域扩大了。原来的right_border - 1的数,换到i位置,要处理吗?要处理!为什么?因为我们是从左往右遍历的,right_border - 1的数,我们都还没看过,不知道是什么情况。
        • 总结一遍,如果i是蓝色,则swap(i, right_border - 1),同时right_border--
    • 那什么时候终止遍历?当i == right_border的时候终止,因为[right_border, n - 1]都是蓝色了
    • 在脑子里想一下,左边红色,中间白色,右边蓝色,然后两条分界线分成三部分,就很好理解了。
  4. 代码

    class Solution {
    public:
        void swap(vector<int>& nums, int i, int j) {
            int tmp = nums[i];
            nums[i] = nums[j];
            nums[j] = tmp;
        }
        void sortColors(vector<int>& nums) {
            int left_border = -1;
            int right_border = nums.size();
            int i = 0;
            while(i < right_border) {
                if (nums[i] == 1) {    // 白色
                    ++i;
                } else if(nums[i] == 0) {   // 红色  发货到红色区域
                    swap(nums, i, left_border + 1);
                    left_border++;
                    i++;
                } else {     // 蓝色  发货到蓝色区域
                    swap(nums, i, right_border - 1);
                    right_border--;
                    // 注意这里i不能动
                }
            }
        }
        
    };
    
  5. 补充,为什么说这是快排的一部分?

    • 快排其实就是以某个数num划分,划分成左边小于num,右边大于num,中间等于num,然后中间的已经相等了,所以[0, left_border]继续快排(递归),[right_border, n - 1]继续快排就行了。
    • 这里的某个数要随机取,否则会因为数据情况(本来就是升序或者降序时),退化成O(n^2)
    • 快排

标签:right,颜色,nums,++,分类,75,红色,border,left
From: https://www.cnblogs.com/ouyangxx/p/18539201

相关文章

  • 如何使用Yolov8训练——胸部肺结节目标检测数据集 1个类别 精确度P:0.655,召回率R:0.575,m
    同时yolov8n训练100个epoch检测结果如下精确度P:0.655,召回率R:0.575,mAP50:0.639,map50-95:0.289数据集可直接使用,未做任何数据增强等预处理胸部肺结节目标检测数据集该数据集已经包括1个类别分别是:target总计图片4882张图像,分辨率是1024x1024像素数据集是txt格式数......
  • 毕业设计-基于多维分类的知识管理系统源码+10000字论文
    项目简介基于SpringBoot的多维分类知识管理系统,是一个旨在提高知识分享和展示效率的信息化平台。该系统主要服务于两类用户:管理员和普通用户。管理员拥有全面的管理权限,能够对用户信息、知识分类和知识信息进行添加、修改、删除和查询操作。此外,管理员还可以添加新的知识点,从......
  • Bayes-CNN-BiGRU-Att贝叶斯算法-卷机网络-双向门控循环单元-注意力机制多特分类预测 M
    %*****************************************************************************************************************************************************************************************************************%%清空环境变量warningoff%关闭报警......
  • 【项目实战】机器学习分类预测(RF/SVM/Logistic)与可解释性分析(SHAP/LIME)
    机器学习分类预测与SHAP可解释性分析研究目的今天,我将尝试预测一个人是否会中风。首先,我将进行广泛的数据可视化。这将帮助我了解是否有任何特征看起来预示着中风,或者实际上预示着不会中风。接下来,我将建立多个模型,并选出表现最好的一个。我将使用f1分数作为主要指标,因为......
  • wordpress站外调用指定ID分类下的推荐内容
    在WordPress中,如果你想从站外调用指定ID分类下的推荐内容,你可以使用WordPressRESTAPI来实现。以下是一个基本的步骤指南:1.启用RESTAPI确保你的WordPress站点已经启用了RESTAPI。大多数现代WordPress版本默认启用此功能。2.获取分类ID首先,你需要知道你要调用的分类的I......
  • 水体颜色智能识别系统
    水体颜色智能识别系统基于AI人工智能机器视觉分析识别技术,水体颜色智能识别系统通过现场监控摄像头,实现对河道、湖面及排水口水体颜色的智能检测与识别。这一系统能够代替人眼,对水体颜色进行24小时不间断的监测,有效克服了传统人工巡检的局限性,提高了监测的效率和准确性。水体颜色......
  • 思通数科AI平台在智慧城市地面垃圾分类中的项目案例分享
    一、系统概述在当今的城市环境管理中,垃圾分类与识别已成为推动环保与资源回收的重要手段。然而,传统的人工垃圾分类方法耗时、效率低,且容易出错,严重制约了垃圾处理的精细化与可持续发展。思通数科的AI平台专注于解决这一行业痛点。我们的系统通过深度学习和计算机视觉技术,能够精准......
  • 具有低开关损耗的: FF100R12W1T7EB11 FF300R12ME7PB11 FF75R12W1T7EB11 FF800R12KE7PE
    关于英飞凌IGBT模块:这些产品组合包括不同的先进IGBT功率模块产品系列,它们拥有不同的电路结构、芯片配置和电流电压等级,适用于几乎所有应用。市场知名的62mm、Easy和Econo系列、IHM/IHVB系列、PrimePACK™和XHP™系列功率模块都采用了最新的IGBT技术。它们有斩波器、DUAL、PIM......
  • MR756-ASEMI汽车用整流二极管MR756
    编辑:llMR756-ASEMI汽车用整流二极管MR756型号:MR756品牌:ASEMI封装:BUTTON正向电流:6A反向电压:1000V正向压降:1.2V引线数量:2芯片个数:1芯片尺寸:MIL漏电流:10ua恢复时间:35ns浪涌电流:400A芯片材质:正向电压:1.10V封装尺寸:如图特性:车用二极管工作结温:-65℃~175℃包装方式:50......
  • 电机分类及组成及FOC原理等个人理解
    https://zhihui.lingjun.life/2020/07/02/foc/1.BLDCBLDC就是无刷直流电机,通过磁场:这种,让转子转动起来,一个状态接着一个状态的转起来。而这种换向操作就需要换向器来进行。而无刷电机的驱动主要使用三相逆变电路来实现而逆变电路的意思就是:把直流转换为交流,通过三相PWM矩......