leetcode 2671

news2024/11/16 2:27:23

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_map
    for (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.coloradmin.cn/o/1541365.html

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

相关文章

优维全面可观测产品能力分解⑥:运维状态可观测

本文是《优维全面可观测产品能力分解》系列文章的第六篇&#xff1a;『运维状态可观测』。基于可观测的数据体系&#xff0c;「运维状态可观测」是实现于运维状态的一次深入可观测。 在日常运维场景中&#xff0c;系统/应用运维人员重点关注的是系统/应用是否可用&#xff0c;…

谧林涓露门禁

原神武器升级材料谧林涓露和门禁好像聂。 difference(){union(){cylinder(2, 10,10, $fn365);hull(){translate([15,0,0])cylinder(1,2,2,$fn365);cylinder(1,10,10,$fn365);}}translate([15,0,-1])cylinder(4,1,1,$fn365); }

透视未来工厂:山海鲸可视化打造数字孪生新篇章

在信息化浪潮的推动下&#xff0c;数字孪生工厂项目正成为工业制造领域的新宠。作为一名山海鲸可视化的资深用户&#xff0c;我深感其强大的数据可视化能力和数字孪生技术在工厂管理中的应用价值&#xff0c;同时我们公司之前也和山海鲸可视化合作制作了一个智慧工厂项目&#…

读算法的陷阱:超级平台、算法垄断与场景欺骗笔记19_前方的路

1. 技术与财富分配不均 1.1. 当前的财富分配不均早已成为世界难题 1.1.1. 世界上有一半的人口——相当于35亿人——拥有的财富却不敌在一辆双层巴士上的商业精英的个人财富总和 1.2. 部分线上市场仍受到竞争机制支配的事实并不能为其他市场的反竞争策略开脱 1.3. 企业的市场…

计算机组成原理-5-输入输出系统

5. 输入输出系统 文章目录 5. 输入输出系统5.1 概述5.1.1 I/O系统的发展概况5.1.2 I/O系统的组成5.1.3 I/O设备与主机的连接5.1.4 I/O设备与主机传送信息的控制方式 5.2 I/O设备5.3 I/O接口5.4 控制方式5.4.1 程序查询方式5.4.2 程序中断方式5.4.3 DMA方式5.4.4 程序中断方式与…

数字乡村发展策略:科技引领农村实现跨越式发展

随着信息技术的迅猛发展和数字经济的崛起&#xff0c;数字乡村发展策略已经成为引领农村实现跨越式发展的重要手段。科技的力量正在深刻改变着传统农业的生产方式、农村的社会结构以及农民的生活方式&#xff0c;为农村经济发展注入了新的活力和动力。本文将从数字乡村的内涵、…

MySQL数据库 - 事务

1. 事务的概念 事务主要用于处理操作量大&#xff0c;复杂度高的数据。比如说&#xff0c;在人员管理系统中&#xff0c; 要删除一个人员&#xff0c;即需要删除人员的基本资料&#xff0c;又需要删除和该人员相关的信息&#xff0c;如信箱&#xff0c; 文章等等。这样&#x…

Docker 之 数据卷

目录 1. 数据卷是什么 1.1 运行一个带有容器卷存储功能的容器实例 2.能干什么 3. 容器卷案例 3.1 宿主机vs容器之间映射添加容器卷 3.1.1 命令添加&#xff1a; 3.1.2 查看数据卷是否挂载成功 3.1.3 容器和宿主机之间数据共享 3.2 读写规则映射添加说明 3.2.1 读写&…

chatgpt和 github copilot chat哪个更强

chatgpt大家应该都不陌生 ChatGPT 是由 OpenAI 开发的一种基于 GPT&#xff08;生成式预训练模型&#xff09;的聊天机器人。它可以生成语言上下文相关的响应&#xff0c;从而进行自然语言对话。ChatGPT 利用大规模的语言数据进行预训练&#xff0c;并通过微调或在线学习来适应…

10基于访问权限控制和细粒度控制的方式访问资源

访问权限控制 RBAC 基于角色的访问控制(Role-Based Access Control)是按角色进行授权,如主体的角色为总经理时才可以查询企业运营报表和员工工资信息等 缺点&#xff1a;查询工资所需要的角色变化为总经理和部门经理&#xff0c;此时就需要修改判断逻辑为判断用户角色是否为…

02课程发布模块之部署Nginx

部署Nginx 部署网关 通过Nginx访问后台网关&#xff0c;然后由网关再将请求转发到具体的微服务,网关会把请求转发到具体的服务 upstream gatewayserver{server 127.0.0.1:63010 weight10; } # 网站首页对应的虚拟机 server {listen 80;server_name www.51xuecheng.cn…

AtCoder ABC346 A-E题解

比赛链接:ABC346 Problem A: 签到题。 #include <bits/stdc.h> using namespace std; const int maxn105; int A[105],B[105]; int main(){int N;cin>>N;for(int i1;i<N;i)cin>>A[i];for(int i1;i<N;i){B[i]A[i1]*A[i];cout<<B[i]<<end…

【Godot4.2】像素直线画法及点求取函数

概述 基于CanvasItem提供的绘图函数进行线段绘制只需要直接调用draw_line函数就可以了。 但是对于可以保存和赋值节点直接使用的纹理图片&#xff0c;却需要依靠Image类。而Image类没有直接提供基于像素的绘图函数。只能依靠set_pixel或set_pixelv进行逐个像素的填色。 所以…

Linux 的 app :一般到哪里下载 ?(**)

利用 appimagetool 工具对开发好的项目进行打包 &#xff08;***带笔记*&#xff09; https://blog.csdn.net/ken2232/article/details/131313613 1. 首选&#xff0c;直接通过 OS发行版的官网仓库&#xff1a;简单、方便&#xff1b;可能相对最可靠。 如&#xff1a; sudo a…

matlab基于Simulink的模糊逻辑控制应用

一、原理 模糊逻辑指模仿人脑的不确定性概念判断、推理思维方式&#xff0c;对于模型未知或不能确定的描述系统&#xff0c;以及强非线性、大滞后的控制对象&#xff0c;应用模糊集合和模糊规则进行推理&#xff0c;表达过渡性界限或定性知识经验&#xff0c;模拟人脑方式&…

基于YOLOv8深度学习的橙子病害智能诊断与防治系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分类

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

算法:bfs(深度优先搜索)

// dfs习题&#xff1a; // 输入9行&#xff0c;0代表未知 // 输出9行即最终结果 #include <stdio.h> #include <stdlib.h> int main() {int table[9][9];//输入数据for (int i 0; i < 9; i) {for (int j 0; j < 9; j) {scanf("%d", &table[…

js工具方法记录

校验数字是否有效的11位手机号 function isValidPhoneNum(value: string) {return /^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(value) }手机号中间4位掩码 function maskPhoneNum(phone: string, space false) {if (!phone) {return }const reg /(\d{3})\d{4}(\d{4})/return pho…

【测试开发学习历程】MySQL分组查询与子查询 + MySQL表的联结操作

目录 1 MySQL分组查询与子查询 1.1 数据分组查询 1.2 过滤分组 1.3 分组结果排序 1.4 select语句中子句的执行顺序 1.5 子查询 2 MySQL表的联结操作 2.1 关系表 2.2 表联结 2.3 笛卡尔积 2.4 内部联结 2.5 外联结 2.6 自联结 2.7 组合查询 1 MySQL分组查询与子查询…

LangChain-Chatchat知识库对话

前言 上次我们完成了Chatchat的本地部署&#xff0c;使用了LLM对话的功能。这次我们尝试一下其他的功能&#xff0c;之前总是有报错没有跑通&#xff0c;这次处理了几个问题之后才跑通了知识库对话和文件对话。 知识库对话 原理: 首先我们看这个图可以明白&#xff0c;知识库…