当前位置: 首页 > java >正文

75.颜色分类

算法解析:荷兰国旗问题与三色排序

问题描述

给定一个包含红色、白色和蓝色元素的数组,我们需要将它们按照红、白、蓝的顺序进行排序。在本题中,我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。

解决方案分析

方法思路

本文介绍的是一种简单直观的双遍扫描排序方法:

  1. 第一遍扫描:将所有的0(红色)移动到数组的最前面

  2. 第二遍扫描:将所有的1(白色)移动到已经排好序的0之后的区域

这样,剩余的2(蓝色)自然就排在了数组的最后面。

        代码:

class Solution {
public:void sortColors(vector<int>& nums) {int ptr = 0;int n = nums.size();for (int i = 0;i < n;i++) {if (nums[i] == 0) {swap(nums[ptr],nums[i]);++ptr;}}for (int i = 0;i < n;i++) {if (nums[i] == 1) {swap(nums[ptr],nums[i]);++ptr;}}}
};

       时间复杂度:O(n),两次线性扫描

       空间复杂度:O(1),使用了两个额外变量

        快排:

class Solution {
public:void quick(vector<int>& nums,int start,int end) {if (start >= end) return;int i = start - 1;int j = end + 1;int temp = nums[start];int index = start;while (index < j) {if (temp < nums[index]) {swap(nums[index++],nums[++i]);}else if (temp > nums[index]){swap(nums[index],nums[--j]);}else {index++;}}quick(nums,start,i);quick(nums,j,end);}void sortColors(vector<int>& nums) {quick(nums,0,nums.size() - 1);ranges::reverse(nums);}
};

http://www.xdnf.cn/news/5099.html

相关文章:

  • 第一节:JavaScript 简介与开发环境搭建
  • python切片的原理基础
  • houdini快速渲染的优化技巧
  • C语言| 数组名作为函数参数
  • 【Linux】权限
  • PLUS-InVEST 模型与 AI 协同:推动生态研究创新发展
  • pcb样板打样厂家哪家好?
  • O2O上门服务如何颠覆传统足浴行业?真实案例分析
  • Android 移动应用开发:页面跳转与数据传递功能
  • 电动汽车充电设施可调能力聚合评估与预测
  • 开发者日常中的网络调试实战
  • 【linux常用命令】处理失效链接
  • 大白话解释CPU、NPU和GPU
  • Unity 点击按钮,打开 Windows 文件选择框,并加载图片
  • 基于nodejs + Koa +Nuxt3的订单系统项目实战
  • 应急响应靶机训练-挖矿事件:知攻善防实验室
  • element-ui分页的使用及修改样式
  • RabbitMQ事务机制
  • NextPolish1.4.1 安装与使用-bioinformatics tools54
  • leader-line文本添加click点击事件
  • 【人工智能学习之注意力机制浅析】
  • 学习黑客威胁情报(Threat Intelligence)
  • 一文了解Python中的requests库:网络交互的基础
  • AI服务器通常会运用在哪些场景当中?
  • STM32CubeMX安装及使用分享
  • 切比雪夫不等式专题习题
  • Qt开发:项目视图(Item Views)的介绍和使用
  • CRC 循环冗余校验
  • TRAE 配置blender MCP AI自动3D建模
  • 京东商品详情接口 item_get 深度解析