【5.5】指针算法-三指针解决颜色分类

news/2024/11/6 8:25:16/

一、题目

        给定一个包含红色、白色和蓝色,一共n个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

        此题中,我们使用整数0、1和2分别表示红色、白色和蓝色。

示例 1:

输入:nums = [2,0,2,1,1,0]

输出:[0,0,1,1,2,2]

示例 2:

输入:nums = [2,0,1]

输出:[0,1,2]

示例 3:

输入:nums = [0]

输出:[0]

示例 4:

输入:nums = [1]

输出:[1]

提示:

  • n == nums.length

  • 1 <= n <= 300

  • nums[i] 为 0、1 或 2

二、解题思路

        数组中仅包含三种数字:0、1、2。我们只需将 0 移至前面,将 3 移至后面即可。难度并非很大。下面以示例一为例,来看如下动图。

三、代码实现

#include <iostream>
#include <vector>using namespace std;// 交换数组中的两个数字
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) {// 0的右边界int left = 0;// 2的左边界int right = nums.size() - 1;// 指向当前数字int index = 0;while (index <= right) {if (nums[index] == 0) {// 如果是0,就往前面移swap(nums, left++, index++);} else if (nums[index] == 1) {index++;} else if (nums[index] == 2) {// 如果是2就往后面移swap(nums, right--, index);}}
}int main() {vector<int> nums = {2, 0, 2, 1, 1, 0};sortColors(nums);for (int num : nums) {cout << num << " ";}cout << endl;return 0;
}


http://www.ppmy.cn/news/1544759.html

相关文章

868历年真题算法设计题+程序设计题

11.52013年真题*4 一天四道太顶了&#xff0c;11.6-11.15先且两天四道题&#xff0c;先把数学二轮三轮结束&#xff01; 如果程序设计题写不了 核心算法 &#xff0c;但是把思路写上去&#xff0c;只将核心函数空出来也能拿些分&#xff01;&#xff01;DFS大概率不会和stack同…

面试题分享11月5日

1、JWT 数据结构 头部&#xff08;Header&#xff09;、负载&#xff08;Payload&#xff09;、签名&#xff08;signature&#xff09; 头部&#xff08;Header&#xff09;、负载&#xff08;Payload&#xff09;都是明文的&#xff0c;根据 base64URL 进行转化&#xff0c…

SRS:构建实时免费视频服务器的全方位指南

SRS&#xff08;Simple Realtime Server&#xff09;是一个开源的、基于MIT协议的实时视频服务器&#xff0c;以其简单、高效而著称。它支持多种流媒体协议&#xff0c;包括RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH和GB28181等&#xff0c;使其成为直播和WebRTC领域的理想…

如何处理vue项目中的错误

在Vue项目中处理错误是一项重要的工作&#xff0c;确保应用程序的健壮性和良好的用户体验。常见的错误处理方法包括以下几种&#xff1a; 1. 全局错误处理 Vue 提供了 errorCaptured 钩子和 errorHandler 处理全局错误&#xff1a; Vue.config.errorHandler (err, vm, info…

MySQL 和 PostgreSQL 的对比概述

MySQL 和 PostgreSQL 是两种广泛使用的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它们各自有其特点和优缺点。以下将从多个方面对它们进行详细比较。 1. 介绍 MySQL&#xff1a; MySQL 由瑞典公司 MySQL AB 开发&#xff0c;2008 年被 Sun Microsyst…

什么是Scaling Law,谈谈你对它的理解

1. 什么是Scaling Law 1.1 Scaling Law的目标 Having a sense of the capabilities of a model before training can improve decisions around alignment, safety, and deployment. — GPT4 Technical Report 在训练之前了解模型的能力&#xff0c;以改善关于大模型的对齐、…

鸢尾博客项目开源

1.博客介绍 鸢尾博客是一个基于Spring BootVue3 TypeScript ViteJavaFx的客户端和服务器端的博客系统。项目采用前端与后端分离&#xff0c;支持移动端自适应&#xff0c;配有完备的前台和后台管理功能。后端使用Sa-Token进行权限管理,支持动态菜单权限&#xff0c;服务健康…

基于Spring Boot的信息学科平台系统开发与优化

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…