首页 > 其他分享 >华为20240821笔试第一题笔记

华为20240821笔试第一题笔记

时间:2024-08-29 18:04:12浏览次数:16  
标签:map 笔试 res 20240821 华为 vector auto pair 元素

https://mp.weixin.qq.com/s?__biz=MzkyNTQ3NDAzNw==&mid=2247489703&idx=1&sn=96d3f883998b4bbb395dfc5f08906399&chksm=c02307cb0d07e5b4e7140350b08b20bd7b5ba950886d62a60f44af3bc6c070c1031827edc979&mpshare=1&scene=1&srcid=0821m7WJaqagZZ55Edw4FMUm&sharer_shareinfo=71cf0131d731c3e6876a752bd4a99516&sharer_shareinfo_first=71cf0131d731c3e6876a752bd4a99516#rd

以上是题目链接

1. 将 map 转换为 vector

 

vector<pair<vector<int>, pair<int, int>>> sorted_res(res.begin(), res.end());

res 是一个 map,其键是一个 vector<int>(表示一个数据块),值是一个 pair<int, int>(表示该块首次出现的下标及出现次数)。

vector<pair<vector<int>, pair<int, int>>> 是一个向量,其元素是与 map 的键值对相同的类型。

通过 res.begin()res.end() 初始化 sorted_res,实际上是将 map 中的所有元素复制到 vector 中。这样做的原因是 vector 可以进行排序操作,而 map 本身是按键(即块内容)排序的,不支持按值排序。

2. 按首次出现的下标排序

sort(sorted_res.begin(), sorted_res.end(), [](const auto &a, const auto &b) {
    return a.second.first < b.second.first;
});
  • sort 是一个标准库函数,用于对 vector 中的元素进行排序。

  • 第三个参数是一个 lambda 表达式,定义了排序的依据。

  • [](const auto &a, const auto &b) 是一个 lambda 表达式,表示一个匿名函数。它接收两个参数 ab,这两个参数是 sorted_res 中的元素类型的常量引用。

  • 在本例中,abpair<vector<int>, pair<int, int>> 类型的元素。

  • return a.second.first < b.second.first; 语句返回一个布尔值:

    • 如果 a 在原始数据中首次出现的下标小于 b,则返回 true,表示 a 应该排在 b 之前。
    • 否则返回 false

更具体的问题

1. map 中的块数据及其出现信息如何转移到 vector 中?

mapvector 的数据结构

    • map: 在这段代码中,map<vector<int>, pair<int, int>> res 是一个字典结构,它将 vector<int> 类型的键(表示一个数据块)映射到 pair<int, int> 类型的值(表示该块在原始序列中的首次出现位置和出现次数)。
      例如,res 中的一个元素可能是:{ {1, 2, 3}, {0, 2} }
      这表示数据块 [1, 2, 3] 首次出现在原始序列的第 0 个位置,并且该块在序列中出现了 2 次。

    • vector: vector<pair<vector<int>, pair<int, int>>> sorted_res 是一个动态数组,其中每个元素都是一个 pairpair 的第一个元素是一个 vector<int>(数据块),第二个元素是一个 pair<int, int>(块的首次出现位置和出现次数)。
      例如,sorted_res 中的一个元素可能是:({1, 2, 3}, {0, 2})

数据转移的过程

vector<pair<vector<int>, pair<int, int>>> sorted_res(res.begin(), res.end());
  • res.begin()res.end() 分别返回指向 map 开始和结束的迭代器。
  • map 中的每个元素是一个 pair,其第一个元素是键(数据块 vector<int>),第二个元素是值(pair<int, int>)。
  • vector 的构造函数接受两个迭代器作为参数,将 map 中的所有元素复制到 vector 中。因此,sorted_res 就包含了 res 中的所有键值对,数据形式保持不变。

2. pair 的数据形式及作用

pair 是 C++ 标准库中的一个模板类,用于存储一对值。它的定义如下:

template <class T1, class T2> 
struct pair {
    T1 first;
    T2 second;
};
  • 数据形式: pair<T1, T2> 表示存储两个不同类型的对象 T1T2
  • 用途: pair 常用于需要将两个相关联的对象组合在一起时。例如,可以将一个 int 和一个 string 组合在一起存储。

3. const auto & 的数据类型

  • auto: 是 C++11 引入的一个自动类型推导关键字,编译器会根据上下文推断出变量的类型。
  • const: 表示变量是常量,不可修改。
  • &: 表示该变量是一个引用,避免了拷贝,提高了效率。

const auto & 是一种组合使用的形式,用来声明一个变量为 常量引用,编译器会自动推导其具体类型。
sort 函数中的使用是为了避免拷贝 pair 对象(ab),提高代码效率,同时保证它们不会被修改。

在这段代码中,ab 的类型会被推导为 const pair<vector<int>, pair<int, int>> &。也就是说,它们是指向 vector 元素的常量引用。

4. sort 的其他使用场景及示例

std::sort 是 C++ 标准库提供的排序函数。它有多种形式,通常使用以下形式:

sort(begin_iterator, end_iterator, compare_function);
  • begin_iteratorend_iterator:要排序的范围。
  • compare_function:一个比较函数或 lambda 表达式,决定排序顺序。

5.#include <tuple>是什么?

#include <tuple> 是 C++ 标准库中的一个头文件,它提供了模板类 std::tuple 的定义。std::tuple 是一个通用的集合类,可以用来存储任意数量和类型的元素。这使得 tuple 类比 pair 更加灵活,因为 pair 只能存储两个元素,而 tuple 可以存储多个元素。

#include <pair> 是错误的,因为 C++ 标准库中没有一个专门的头文件叫做 <pair>

std::pair 是定义在 <utility> 头文件中的。要使用 std::pair,你需要包含 <utility> 头文件:

6.size_t和auto的区别

区别

特性size_tauto
定义 无符号整数类型,用于表示对象大小或数组索引。 关键字,用于自动类型推导。
用途 用于表示非负整数,通常与内存大小或数组索引相关。 用于自动推导变量的类型。
使用场景 适用于需要表示大小、长度、索引的场景。 适用于任何类型推导场景,简化代码编写。
示例 size_t index = 0; auto x = 5;auto it = vec.begin();

 

  • size_t 是一个固定的无符号整数类型,专门用于表示大小和索引。
  • auto 是一个自动类型推导关键字,编译器会根据初始化表达式自动确定类型。

size_tauto 用于不同的场景:size_t 适合在需要表示内存相关大小或索引时使用,而 auto 则在任何需要简化类型声明的场景下都可以使用。

标签:map,笔试,res,20240821,华为,vector,auto,pair,元素
From: https://www.cnblogs.com/spp20/p/18387335

相关文章

  • 解密华为问界M7 Pro:智能出行的全新里程碑与技术亮点
    解读华为问界M7Pro的智能里程碑引言2024年8月,智能出行领域迎来了一个激动人心的时刻——问界M7Pro的重磅发布。这款智能SUV,不仅是华为在汽车领域的又一次大胆尝试,更是鸿蒙智行系统的一次全面进化。伴随着全球智能化浪潮的推进,问界M7Pro将会带来怎样的惊喜?在这篇文章中,我们将......
  • 华为java岗经典面试题解析
    题目为在一个整形的数组中,在数组中只有一值个是不重复的,其他的值都是有两个重复的值,找出不重复的那个值。{11,11,12,13,13,16,16}解析为当用Java来解决这个问题时,可以使用异或运算来找出只出现一次的元素。以下是一个示例Java程序,演示了如何在一个整型数组中找出只出现一次的元......
  • 华为8.21笔试题
    第三题:主要是不亲和关系的存储,其余部分通过回溯即可解决#include<bits/stdc++.h>usingnamespacestd;constintN=35;intt[N];intn;unordered_map<int,unordered_set<int>>mp;intcost=INT_MAX,ans=0;boolcheck(intu,unordered_set<int>&used){......
  • ICML 2024 | 全新图卷积!Mila和华为提出CKGConv:连续卷积核的图卷积网络
    前言 在ICML2024上,来自麦吉尔大学,Mila魁北克人工智能研究所以及华为诺亚方舟实验室的研究者发表了一个基于连续卷积核(continuouskernel)的全新图卷积算子(图连续卷积CKGConv),基于此算子的纯图卷积网络(CKGCN)在多个图任务中同样能够达到媲美SOTA图Transformer的性能。作者通过......
  • Java笔试面试题之多线程常见考点总结
    Java多线程面试题涵盖了Java多线程编程的多个重要方面,主要考察面试者对Java并发编程的理解和应用能力。以下是常见的考点总结:基本概念与区别:进程与线程的区别:进程是资源分配的基本单位,线程是CPU调度的基本单位,线程共享进程资源。Java堆与栈的区别:堆用于存储对象实例,栈用......
  • 华为昇腾Atlas 200I DK A2安装MIndspore失败
    该最新的镜像版本为预装了CANN的7.0R1版本的CANN在MIndspore官网进行了相对应的CANN和MIndspore的版本相关匹配从图中可以看出来7.0仅仅支持Ascend的910而我们的Atlas200IDKA2处理器为Ascend310因此7.0的CANN明显不符合我们的型号于是我决定选择进行降低CANN的版本进......
  • 华为交换基础:
    目录1.为设备配置登录密码形式(需要在console0的状态下):2.为设备配置提示语句:3.配置telent/ssh流程:A.配置telnet:(password或aaa)B.配置SSH(使用RSA密钥交换进行远程登录):4.hybird详情见笔记或者视频。。。5.vlan高级技术:01:VLAN聚合(Super-VLAN)(VLANAggregation):指在一个......
  • 华为万兆猫HN8145X6使能+补全AllShell+修改SN+E改XG+切换华为界面
    第〇部分准备工作1、查询老光猫上的LOID(电信、联通)、Password(移动)。1.1用光猫默认账号密码(详见光猫底部铭牌)访问光猫;状态-状态总览:宽带识别码(LOID):网络-远程管理-宽带识别码(LOID)认证-宽带识别码(LOID):2、记录老光猫的互联网、IPTV的默认配置数据,截图存档(建议项,一般......
  • 华为云配置宝塔面板建立站点‘无法打开网页‘解决办法
    站点无法访问一般都是端口没开放打开自己的云主机配置安全组,点右边三个点更改安全组看到此页面,点新建安全组 右边配置规则 一键放通常用端口 现在就能正常访问了 ......
  • 基于华为昇腾910B和LLaMA Factory多卡微调的实战教程
      大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于大模型算法的研究与应用。曾担任百度千帆大模型比赛、BPAA算法大赛评委,编写微软OpenAI考试认证指导手册。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。授权多项发明专利。对机器学习和......