leetcode 2671

leetcode 2671

题目

在这里插入图片描述

例子

在这里插入图片描述

思路1

使用哈希, unordered_map 是基于hash 实现的key,val 存储。

代码1

class FrequencyTracker {unordered_map<int, int>m;public:FrequencyTracker() {   }void add(int number) {if(m.find(number) == m.end()){m.insert({number, 1});}else{m[number]++;}return;}void deleteOne(int number) {if(m.find(number) == m.end()){return;}else{if(m[number] > 0 ){m[number]--;}else{m.erase(number);}}return;}bool hasFrequency(int frequency) {for(auto const &mm: m){if(mm.second == frequency){return true;}}return false;}
};/*** Your FrequencyTracker object will be instantiated and called as such:* FrequencyTracker* obj = new FrequencyTracker();* obj->add(number);* obj->deleteOne(number);* bool param_3 = obj->hasFrequency(frequency);*/

在这里插入图片描述

思路2

记录freq的频次
在这里插入图片描述

代码2

class FrequencyTracker {unordered_map<int, int>m;unordered_map<int, int> freq;public:FrequencyTracker() {   }void add(int number) {if(m.find(number) == m.end()){m[number]++;freq[m[number]]++;}else{freq[m[number]]--;m[number]++;freq[m[number]]++;}return;}void deleteOne(int number) {if(m.find(number) == m.end()){return;}else{int f1=m[number];freq[f1]--;if(f1 == 1){m.erase(number);}else{int f2 = --m[number];freq[f2]++;}}return;}bool hasFrequency(int frequency) {return freq[frequency];}
};/*** Your FrequencyTracker object will be instantiated and called as such:* FrequencyTracker* obj = new FrequencyTracker();* obj->add(number);* obj->deleteOne(number);* bool param_3 = obj->hasFrequency(frequency);*/

unordered_map insert 使用

将键值对作为一个 std::pair 插入到 std::unordered_map 中。修改后的代码如下所示:

std::unordered_map<int, int> m;if(m.find(number) == m.end()){m.insert(std::make_pair(number, 1));
}

或者,您也可以使用 C++11 中的初始化列表来插入键值对,如下所示:

std::unordered_map<int, int> m;if(m.find(number) == m.end()){m.insert({number, 1});
}

这样就可以正确地将键值对 {number, 1} 插入到 std::unordered_map<int, int> 中。

unordered_map 遍历

#include <iostream>
#include <unordered_map>int main() {std::unordered_map<int, int> m1 = {{1, 10}, {2, 20}, {3, 30}};// 使用迭代器遍历 unordered_mapfor (auto it = m1.begin(); it != m1.end(); ++it) {std::cout << "Key: " << it->first << ", Value: " << it->second << std::endl;}return 0;
}
std::unordered_map<int, int> m1 = {{1, 10}, {2, 20}, {3, 30}};using iterator_type = std::__detail::_Node_iterator<std::pair<int, int>, false, false>;
for (iterator_type it = m1.begin(); it != m1.end(); ++it) {// 访问键值对std::cout << it->first << " : " << it->second << std::endl;
}

or

for(auto const &mm: m1){std::cout << "Key: " << mm.first << ", Value: " << mm.second << std::endl;}

在这两个循环中,主要区别在于循环变量 mm 的类型和如何访问 mm 对元素的影响。

  1. for(auto const mm: m1)
    在这种情况下,mm 是按值传递的,即每次迭代都会创建 mm 的副本。因此,mmstd::pair<int, int> 类型的副本。这意味着在循环内对 mm 的修改不会影响原始的 m1 中的元素。

  2. for(auto const & mm: m1)
    在这种情况下,mm 是按引用传递的,即每次迭代都是对原始元素的引用。因此,mmstd::pair<int, int> 类型的引用。这意味着在循环内对 mm 的修改会直接影响原始的 m1 中的元素。

因此,如果您希望在循环中修改 m1 中的元素,应该使用 for(auto const & mm: m1),以便通过引用对元素进行访问和修改。如果只是需要读取元素而不修改,可以使用 for(auto const mm: m1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/766699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

备战蓝桥杯---牛客寒假算法基础集训6

1.并查集数学 分析&#xff1a; 首先我们知道算数基本定理&#xff0c;如果两个数有大于1的质因子&#xff0c;那么我们就需要把他们放在同一个集合&#xff0c;因此我们可以用欧拉刷出1e6范围内的素数&#xff0c;然后依次看输入的数。 拿202*2*5举例子&#xff0c;我们在求…

算法系列--链表刷题(二)

&#x1f495;"轻舟已过万重山"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;算法系列–链表刷题(二) 今天为大家带来的是算法系列--链表刷题(二),带来了几道经典的有关链表的面试题(合并K个有序列表) 1.两数相加 https://leetcode.cn/problems/a…

测试ALPHA开发板CAN1的设备树文件

一. 简介 前面一篇文章学习了 ALPHA开发板上的 CAN接口的设备节点信息&#xff0c;文章如下&#xff1a; ALPHA开发板修改CAN的设备树节点信息-CSDN博客 本文对设备树文件进行测试&#xff0c;即开发板加载 .dtb设备树文件。 二. 加载测试 CAN的设备树文件 1. 拷贝设备树…

fiddler过滤器使用,隐藏图片、js、css请求

如果抓包过程中不想查看图片、js、css请求&#xff0c;或者只想抓某个ip或者某个网页下的请求&#xff0c;可以在过滤器中设置。 &#xff08;1&#xff09;没有开启过滤器 可以看出所有的请求都会抓取&#xff0c;cs、js、图片请求都有 &#xff08;2&#xff09;开启过滤器 …

dubbo 源码系列之-集群三板斧---负载均衡(二)

在上一课时我们了解了 LoadBalance 接口定义以及 AbstractLoadBalance 抽象类的内容&#xff0c;还详细介绍了 ConsistentHashLoadBalance 以及 RandomLoadBalance 这两个实现类的核心原理和大致实现。本课时我们将继续介绍 LoadBalance 的剩余三个实现。 LeastActiveLoadBala…

MySQL | 视图

视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表&#xff0c;基表的数据变化也会影响到视图。 1. 基本使用 1.1. 创建视图 create view 视图名 as select语句&#xff1b; 创建测…

hcip实验

一、实验拓扑 二、实验划分 AR1的Serial3/0/0接口&#xff1a;192.168.1.1/24&#xff1b; AR2的Serial3/0/0接口&#xff1a;192.168.1.2/24&#xff1b; AR2的Serial3/0/1和4/0/0的聚合接口&#xff1a;192.168.2.2/24&#xff1b; AR3的Serial3/0/0和3/0/1的聚合接口&am…

网络安全实训Day8

写在前面 网络工程终于讲完了。这星期到了网络安全技术部分。 网络安全实训-网络安全技术 网络安全概述 信息安全&#xff1a;所有保障计算机硬件、系统、软件、数据不因有意或无意的行为导致的服务中断、数据损坏或丢失等安全事件的保障技术 网络安全&#xff1a;基于计算机…

C/C++之内存旋律:星辰大海的指挥家

个人主页&#xff1a;日刷百题 系列专栏&#xff1a;〖C/C小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 &#x1f30e;欢迎各位→点赞&#x1f44d;收藏⭐️留言&#x1f4dd; ​ ​ 一、C/C内存分布 我们先来了解一下C/C内存分配的几个区域&#xff0c;以下面的代码为例来看…

机器学习——决策树剪枝算法

机器学习——决策树剪枝算法 决策树是一种常用的机器学习模型&#xff0c;它能够根据数据特征的不同进行分类或回归。在决策树的构建过程中&#xff0c;剪枝算法是为了防止过拟合&#xff0c;提高模型的泛化能力而提出的重要技术。本篇博客将介绍剪枝处理的概念、预剪枝和后剪…

C语言内存函数(1)【memcpy函数的使用与模拟实现】【memmove函数的使用和模拟实现】

关于内存函数有四个函数需要我们学习。分别是memcpy&#xff0c;memmove&#xff0c;memset和memcmp。都在头文件string.h里面。 一.memcpy函数的使用 一提到这个函数&#xff0c;我们可能会联想到strcpy函数&#xff0c;但strcpy函数是针对字符串的拷贝。但是我们在写代码的…

百度文心一言(ERNIE bot)API接入Android应用

百度文心一言&#xff08;ERNIE bot&#xff09;API接入Android应用实践 - 拾一贰叁 - 博客园 (cnblogs.com) Preface: 现在生成式AI越来越强大了&#xff0c;想在android上实现一个对话助手的功能&#xff0c;大概摸索了一下接入百度文心一言API的方法。 与AI助手交换信息的…

C++类的6个默认成员函数(构造)

C类和对象基础-CSDN博客https://blog.csdn.net/lh11223326/article/details/136834917?spm1001.2014.3001.5501 目录 1.构造函数 概念 特性 2.析构函数 概念 特性 3.拷贝构造函数 概念 特征 4.赋值运算符重载&#xff08;构造实现&#xff09; 运算符重载 赋值运算…

Kafka快速入门及使用

入门 官网 简介 Kafka是一个分布式的流媒体平台应用&#xff1a; 消息系统日志收集用户行为追踪流式处理 特点 高吞吐量消息持久化高可靠性高扩展性 常用术语 Broker&#xff1a;集群中的服务器Zookeeper&#xff1a;服务管理Topic&#xff1a;主题&#xff0c;Kafka发…

Linux/openEuler系统部署spring boot+vue前后端分离项目(nginx均衡代理)

Linux/openEuler系统部署spring bootvue前后端分离项目&#xff08;nginx均衡代理&#xff09; 1、系统环境准备&#xff0c;安装openjdk和nginx还有MySQL&#xff0c;咱们本文先连接主机mysql进行登录&#xff08;linux上的mysql服务可以先不安装&#xff09; 可以看我前面的…

springboot精品源码

springboot精品源码 所有项目都包括&#xff1a;源码数据库文件开题LW说明文档运行视频 请看主页资料联系。 项目类型包括: 1 SpringBoot学生心理咨询评估系统 2 基于SpringBoot的网上订餐系统 3 大学生租房平台的设计与实现 4 SpringBoot房屋租赁系统 5 基于SpringBoot的课…

SpringCloud之网关组件Gateway学习

SpringCloud之网关组件Gateway学习 GateWay简介 Spring Cloud Gateway是Spring Cloud的⼀个全新项目&#xff0c;目标是取代Netflix Zuul&#xff0c;它基于Spring5.0SpringBoot2.0WebFlux&#xff08;基于高性能的Reactor模式响应式通信框架Netty&#xff0c;异步⾮阻塞模型…

STM32---DHT11温湿度传感器与BH1750FVI光照传感器(HAL库、含源码)

写在前面&#xff1a;本节我们学习使用两个常见的传感器模块&#xff0c;分别为DHT11温湿度传感器以及BH1750FVI光照传感器,这两种传感器在对于环境监测中具有十分重要的作用&#xff0c;因为其使用简单方便&#xff0c;所以经常被用于STM32的项目之中。今天将使用分享给大家&a…

HTML5和CSS3笔记

一&#xff1a;网页结构(html)&#xff1a; 1.1&#xff1a;页面结构&#xff1a; 1.2&#xff1a;标签类型&#xff1a; 1.2.1&#xff1a;块标签&#xff1a; 1.2.2&#xff1a;行内标签&#xff1a; 1.2.3&#xff1a;行内块标签&#xff1a; 1.2.4&#xff1a;块标签与行…

如何用VSCode和Clangd与Clang-Format插件高效阅读Linux内核源码及写驱动

一、如何高效阅读Linux源码&#xff1a;基于clangd uboot/busybox等都可以用这种方式&#xff0c;理论上说所有基于Make和Cmake的源码工程都可以用这套方案 阅读Linux源码最大问题在于调用链太复杂&#xff0c;一个函数或变量引用太多&#xff0c;source insight和cscope等基于…