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

LeetCode -Hot100 -75. 颜色分类

前言

本专栏主要通过“LeetCode 热题100”,来捡起自己本科阶段的算法知识与技巧。语言主要使用c++/java。如果同样正在练习LeetCode 热题100的朋友欢迎关注或订阅本专栏。有疑问欢迎留言交流~

题目描述

题目链接

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

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

必须在不使用库内置的 sort 函数的情况下解决这个问题。

示例 1:

输入:nums = [2,0,2,1,1,0]
输出:[0,0,1,1,2,2]
示例 2:

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

思路

这个题目被leetcode归类为技巧专栏里面。**题目是一个典型的“假排序”问题。**题目的背景虽然是说的排序,但是其实压根不用真的去排序,只需要记录每个元素出现的个数即可。

记得本科做算法训练也出现过这类题目。要排序的数组很大,即便是O(nlog(n))也无法满足要求。但是它给的数字本身值的范围很小,技巧和本题一摸一样。

本题代码如下:

class Solution {
public:void sortColors(vector<int>& nums) {//经典的“假排序”(只需要记录出现的次数)unordered_map<int,int> numCount;for(int num:nums){numCount[num]++;}//放0int curi = 0;while(numCount[0]--){nums[curi++] = 0;}//放1while(numCount[1]--){nums[curi++] = 1;}//放2while(numCount[2]--){nums[curi++] = 2;}}
};

http://www.mrgr.cn/news/81878.html

相关文章:

  • 计算机网络面试常见知识框架以及常见面试题解
  • 如何利用 ClickHouse 实现高级分析:MySQL 到 ClickHouse 实时数据同步指南
  • 从零开始采用命令行创建uniapp vue3 ts springboot项目
  • java下载文件流,不生成中间文件。
  • 海是倒过来的天-MUSC中音频题的常见思路
  • 每日一题 371. 两整数之和
  • cesium小知识:ScreenSpaceEventHandler 详解示例
  • 均值聚类算法
  • 区块链安全常见的攻击——ERC777 重入漏洞 (ERC777 Reentrancy Vulnerability)【5】
  • 【深入剖析开源项目 Infrastructure:技术基石与无限可能】
  • docker 安装与配置 gitlab
  • java开发中注解汇总​​
  • 基于SpringBoot+Vue的旅游推荐系统
  • 网络基础知识总结
  • Postman接口测试03|执行接口测试、全局变量和环境变量、接口关联、动态参数、断言
  • 精通 CSS 阴影效果:从基础到高级应用
  • 2.微服务灰度发布落地实践(agent实现)
  • RabbitMQ工作模式(详解 工作模式:简单队列、工作队列、公平分发以及消息应答和消息持久化)
  • nss刷题
  • vue 基础学习
  • win10、win11-鼠标右键还原、暂停更新
  • Linux 笔记 /etc 目录有什么用?
  • Datawhale-AI冬令营二期
  • llm知识梳理
  • 深度学习笔记(9)——神经网络和反向传播
  • ESP-IDF学习记录(2)ESP-IDF 扩展的简单使用