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_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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习 | 期望最大化(EM)算法介绍和实现

在现实世界的机器学习应用中&#xff0c;通常有许多相关的特征&#xff0c;但只有其中的一个子集是可观察的。当处理有时可观察而有时不可观察的变量时&#xff0c;确实可以利用该变量可见或可观察的实例&#xff0c;以便学习和预测不可观察的实例。这种方法通常被称为处理缺失…

pytorch 实现多层神经网络MLP(Pytorch 05)

一 多层感知机 最简单的深度网络称为多层感知机。多层感知机由 多层神经元 组成&#xff0c;每一层与它的上一层相连&#xff0c;从中接收输入&#xff1b;同时每一层也与它的下一层相连&#xff0c;影响当前层的神经元。 softmax 实现了 如何处理数据&#xff0c;如何将 输出…

【算法】小强爱数学(迭代公式+数论取模)

文章目录 1. 问题2. 输入3. 输出4. 示例5. 分析6. 思路7. 数论&#xff0c;取模相关公式8. 数论&#xff0c;同余定理9. 代码 1. 问题 小强发现当已知 x y B xyB xyB以及 x y A xyA xyA时,能很轻易的算出 x n x_ {n} xn​ y n y_ {n} yn​ 的值.但小强想请你在已知A和B的…

Java IO的基本使用和常见类的介绍及其案例讲解

Java IO&#xff08;Input/Output&#xff09;是Java编程语言中用于处理输入输出的机制。IO包含了读取和写入数据的功能&#xff0c;可以实现文件的读写、网络通信、和各种设备的输入输出操作。在Java中&#xff0c;IO操作主要由输入流&#xff08;Input Stream&#xff09;和输…

mysql基础2多表查询

多表查询 多表关系: 一对多 案例: 部门 与 员工的关系 关系: 一个部门对应多个员工&#xff0c;一个员工对应一个部门 实现: 在多的一方建立外键&#xff0c;指向一的一方的主键 多对多 案例: 学生 与 课程的关系 关系: 一个学生可以选修多门课程&#xff0c;一门课程也可以…

javaWeb奶茶商城前后台系统

一、简介 在当前数字化时代&#xff0c;电子商务已成为人们生活中不可或缺的一部分。为了满足用户对奶茶的需求&#xff0c;我设计并实现了一个基于JavaWeb的奶茶商城前后台系统。该系统涵盖了用户前台和管理员后台两大模块&#xff0c;包括登录注册、商品展示、购物车管理、订…

java面向对象编程基础

对象&#xff1a; java程序中的对象&#xff1a; 本质上是一种特殊的数据结构 对象是由类new出来的&#xff0c;有了类就可以创建对象 对象在计算机的执行原理&#xff1a; student s1new student();每次new student(),就是在堆内存中开辟一块内存区域代表一个学生对象s1变…

蓝桥杯物联网Lora通信功能总结

1、LORA通信在函数LORA被初始化的时候就已经处于接收状态 即开机即能接收数据 2、LORA数据的接收以及发送都通过FIFO数据线 3、LORA的收发同时进行会产生FIFO数据线的通信干扰 4、LORA_Rx在FIFO中有数据的时候才会取出数据&#xff0c;FIFO没有数据会直接跳过 当LORA在发送数…

UDP建立聊天群

参考网上代码 接收端 #include<myhead.h> #define PRINT_ERR(msg) \ do \ { \ printf("%s,…

求解线性方程组

如图题意看出x1有且仅有两种可能&#xff0c;1或者0&#xff0c;且知道了所有a的值&#xff0c;且因为要求所得答案字典序最小&#xff0c;所以先假设x10。 又因a2x1x2所以可以求出x2的值&#xff0c;又如a2x1x2x3,所以可以求出x3的值依次求出所有x的值&#xff0c;但每求出一…

Java 基础知识- 创建线程的几种方式

大家好我是苏麟 , 今天聊聊创建线程的几种方式 . 创建线程的几种方式 1. 继承Thread类实现多线程 /*** className: ThreadTest* author: SL 苏麟**/ public class ThreadTest extends Thread{public static void main(String[] args) {ThreadTest threadTest new ThreadTes…

第十二届蓝桥杯省赛CC++ 研究生组-路径

记录到每个结点的最短距离&#xff0c;以此为基础计算后续结点最优值 #include<iostream> #include<algorithm> using namespace std; typedef long long ll;ll gcd(int a, int b){if(!b) return a;return gcd(b, a % b); }int main(){ll dp[2022] {0};//dp[i]记…

ppp协议

一.实验拓扑 二.实验要求 1.R1和R2使用PPP链路直连&#xff0c;R2和R3把2条PPP链路捆绑为PPP MP直连 2.按照图示配置IP地址 3.R2对R1的PPP进行单向chap验证 4.R2和R3的PPP进行双向chap验证 三.实验思路 1.R2对R1进行ppp单向chap验证&#xff1a; R2配置为主&#xff0c;…

数据库语言一些基本操作

1&#xff0c;消除取值重复的行。 例如&#xff1a;查成绩不及格的学号&#xff1a;SELECT DISTINCT sno FROM SC WHERE grade<60. 这里使用DISTINCT表示取消取值重复的行。 2&#xff0c;比较。 例如&#xff1a;查计算机系全体学生的姓名&#xff1a;SELECT Sname FROM…

模拟实现字符串库函数(一)

在C语言的标准库中提供了很多针对字符串的库函数&#xff0c;这篇文章我们会学习并模拟实现几个简单的库函数 求字符串长度函数strlen strlen函数我们在之前已经用过很多次了&#xff0c;同时也模拟实现过&#xff0c;但是都不是模仿标准库中的strlen来实现&#xff0c;首先我…

三.寄存器(内存访问)

1.内存中字的存储 2.并不是所有cpu都支持将数据段送入段寄存器&#xff0c;所以有时候用个别的寄存器先把数据段存储起来&#xff0c;再把该寄存器mov到段寄存器。 3.字的传送 4.栈 5.栈机制 举例说明 6.栈顶超界问题 push超界 pop超界 7.栈段

pta-洛希极限

科幻电影《流浪地球》中一个重要的情节是地球距离木星太近时&#xff0c;大气开始被木星吸走&#xff0c;而随着不断接近地木“刚体洛希极限”&#xff0c;地球面临被彻底撕碎的危险。但实际上&#xff0c;这个计算是错误的。 洛希极限&#xff08;Roche limit&#xff09;是一…

python写爬虫爬取京东商品信息

工具库 爬虫有两种方案&#xff1a; 第一种方式是使用request模拟请求&#xff0c;并使用bs4解析respond得到数据。第二种是使用selenium和无头浏览器&#xff0c;selenium自动化操作无头浏览器&#xff0c;由无头浏览器实现请求&#xff0c;对得到的数据进行解析。 第一种方…

实战高效RPC方案在嵌入式环境中的应用与揭秘

实战高效RPC方案在嵌入式环境中的应用与揭秘 开篇 在嵌入式系统开发中&#xff0c;大型项目往往采用微服务架构来构建&#xff0c;其核心思想是将一个庞大的单体应用分割成一系列小型、独立、松耦合的服务模块&#xff0c;这些模块可以是以线程或进程形式存在的多个服务单元。…

OpenHarmony开发-线程安全阻塞队列

概述 简介 ​线程安全阻塞队列SafeBlockQueue类&#xff0c;提供阻塞和非阻塞版的入队入队和出队接口&#xff0c;并提供可最追踪任务完成状态的的SafeBlockQueueTracking类。 #include <safe_block_queue.h> 涉及功能 接口说明 OHOS::SafeBlockQueue OHOS::SafeBl…