从C语言到C++_39(C++笔试面试题)next_permutation刷力扣
这篇就一直更新一些C++的选择题和编程题了。
目录
笔试题1
答案及解析1
笔试题2
答案及解析2
力扣编程题
88. 合并两个有序数组
解析代码
349. 两个数组的交集
解析代码
60. 排列序列
解析代码
46. 全排列
解析代码
本篇完。
笔试题1
1. 以下哪种STL容器中的对象是连续存储的:()
A.list
B.vector
C.map
D.set
2. STL中的一级容器有:()
A.vector、deque、list、set、multiset、map、multimap
B.序列式容器、关联式容器、容器适配器
C.set、multiset、map、multimap
D.vector、deque、list
3. 以下STL的容器存放的数据,哪个肯定是排好序的()
A.vector
B.deque
C.list
D.map
4. 当很频繁地对序列中部进行插入和删除操作时,应该选择使用的容器是()
A.vector
B.list
C.deque
D.stack
5. 下面有关vector和list的区别,描述错误的是? ()
A.vector拥有一段连续的内存空间,因此支持随机存取,如果需要高效的随即存取
B.list拥有一段不连续的内存空间,如果需要大量的插入和删除,应该使用list
C.vector<int>::iterator支持“+”、“+=”、“<”等操作符
D.list<int>::iterator则不支持“+”、“+=”、“<”等操作符运算,但是支持了[ ]运算符
6. 关于vector<>初始化问题下面那个是非法的? ()
A.vector<string> sVec;
B.vector<vector<int>> ivvec;
C.vector<vector<string>> svvec( "hello");
7. T是一个数据类型,关于std::vector::at 和 std::vector::operator[] 描述正确的是: ()
A.at总是做边界检查, operator[] 不做边界检查
B.at不做边界检查, operator[] 做边界检查
C.at和operator[] 是一样的
D.at下标越界抛异常,operator[]下标越界触发断言
8. STL中的unordered_map和priority_queue使用的底层数据结构分别是什么?()
A.rbtree,queue
B.hashtable,heap
C.rbtree,heap
D.hashtable,queue
9. map和unordered_map的区别说法错误的是()
A.map的底层是红黑树,unordered_map的底层结构是哈希表
B.map是有序的,unordered_map不是,且map的查询效率更高
C.map和unordered_map底层存储的都是键值对
D.map和unordered_map的应用场景不同
10. 下面关于deque说法正确的是()
A.deque没有vector尾插效率高
B.deque的底层是一段连续空间
C.如果要对集合中的元素进行排序时,元素不适合放在deque中
D.deque是priority_queue的底层默认容器
答案及解析1
1. B
A:错误,list的底层结构为带头结点的双向循环链表,是链式结构
B:正确,vector是动态类型顺序表,底层是一段连续空间
C:错误,map底层是红黑树,树形结构
D:错误,set底层是红黑树,树形结构
2. D
一级容器即序列式容器(存的不是)
A:错误,set、multiset、map、multimap是关联式容器,不是序列式容器
B:错误,非题目所问
C:错误,都是关联式容器
D:正确
3. D
map的底层是红黑树,红黑树是二叉搜索树,二叉搜索树中的元素如果按照中序遍历,可以得到一个有序序列
4. B
频繁的向序列中插入和删除元素时,应该选择链式结构
list底层结构为:带头结点的双向循环链表
5. C
A:正确:构造了一个空的vector,里面放置的是string类型的对象
B:正确:构造了一个空的动态二维数组
C:错误,svvec是二维的,vector套vector,不能直接使用"hello"构造
6. C
A:正确:构造了一个空的vector,里面放置的是string类型的对象
B:正确:构造了一个空的动态二维数组
C:错误,svvec是二维的,vector套vector,不能直接使用"hello"构造
7. D
at和operator[]都是通过下标获取对应的元素,两个的不同是:
at在下标越界时,抛异常
operator[]在下标越界时,触发断言
8. B
unordered_map底层使用的是哈希表,priority_queue底层使用的是堆
9. B
A:正确
B:错误,map底层是红黑树,查询效率为O(logN),unordered_map底层是哈希表,查询效率为 O(1), unordered_map查询的效率更高
C:正确
D:正确,map适合要求结果有序的常见,unordered_map适合是否有序无关,更关注查询效率的场景
10. C
A:错误,如果在不扩容的情况下deque和vector相同,需要扩容时就不同了,vector扩容需要搬移 大量的元素,deque不需要
B:错误,deque是分段连续的,类似动态的二维数组
C:正确,因为要排序就需要遍历,而deque不适合编译,因为其在遍历时,要不断的去检测迭代 器是否在空间边界
D:错误,priority_queue底层的默认容器是vector
笔试题2
1. 下面关于适配器说法正确的是()
A.在STL中,stack和queue与vector一样,都是容器
B.STL中只有容器适配器
C.适配器有自己独立的底层数据结构,不需要借助其他结构
D.适配器是一种设计模式,该种模式是将一个接口包装成客户希望的另一个接口
2. 下面哪一个不是适配器()
A.stack
B.queue
C.反向迭代器
D.以上都是
3. 关于仿函数说法正确的是()
A.仿函数就是一个函数
B.仿函数可以是静态成员函数
C.仿函数是函数对象,可以像函数调用方式使用的对象
D.仿函数与函数指针作用不同
4. 关于仿函数说法错误的是()
A.仿函数可以使算法功能更加灵活
B.如果想要让一个类的对象按照函数方式使用,只需在其中将()重载即可
C.lambda表达式底层实际就是按照仿函数实现的
D.仿函数与函数指针都可以增加算法的灵活性
5. 填写下面空格
1. merge()算法的功能是:_______________________________________________
2. reverse()算法的功能是:_____________________________________________
3. unique()算法的功能是:______________________________________________
4. next_permutation()算法的功能是:____________________________________
5. sort()算法的功能是:_______________________________________________
答案及解析2
1. D
A:错误,在STL中stack和queue被认为是容器适配器,因为它们的底层结构是直接将deque封装 了一下
B:错误,除了容器适配器,还有迭代器适配器,函数适配器
C:错误,适配器没有自己独立的底层数据结构,是将其他结构拿过来重新包装的
D:正确,迭代器模式概念
2. D
A:正确,stack是对deque的重新封装
B:正确,queue是对deque的重新封装
C:正确,反向迭代器失对正向迭代器的封装
D:错误
3. C
A:错误,仿函数是一个类中重载了(),该类的对象可以像函数一样使用的对象
B:错误,仿函数是依靠对象调用的,没有对象无法使用,因为不能是静态成员函数
C:正确
D:错误,作用基本是类似的,都是增加算法的灵活性,只不过C++中使用仿函数更多
4. B
A:正确,STL中的算法都是通用的,有些算法具体的做的事情需要用户通过仿函数方式定制
B:错误,是重载()而不是(],注意看题
C:正确,lambda表达式编译器在编译时会在底层将其转化为仿函数
D:正确
- merge(first1, last1,first2,last2, resutl)算法的功能是:将两个有序序列合并成一个序列保存到result中,合并好之后依然有序
- reverse(first, last)算法的功能是:对[first, last)区间中的元素逆序
- unique(first, last)算法的功能是:对[first, last)区间中的元素去重
- next_permutation(first,last)算法的功能是:获取当前序列的下一个排列组合
- sort(first,last)算法的功能是:对[first, last)区间中的元素排序,重载版本可以指定排升序还是降序
力扣编程题
88. 合并两个有序数组
给你两个按 非递减顺序 排列的整数数组 nums1
和 nums2
,另有两个整数 m
和 n
,分别表示 nums1
和 nums2
中的元素数目。
请你 合并 nums2
到 nums1
中,使合并后的数组同样按 非递减顺序 排列。
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1
中。为了应对这种情况,nums1
的初始长度为 m + n
,其中前 m
个元素表示应合并的元素,后 n
个元素为 0
,应忽略。nums2
的长度为 n
。
示例 1:
输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 输出:[1,2,2,3,5,6] 解释:需要合并 [1,2,3] 和 [2,5,6] 。 合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。
示例 2:
输入:nums1 = [1], m = 1, nums2 = [], n = 0 输出:[1] 解释:需要合并 [1] 和 [] 。 合并结果是 [1] 。
示例 3:
输入:nums1 = [0], m = 0, nums2 = [1], n = 1 输出:[1] 解释:需要合并的数组是 [] 和 [1] 。 合并结果是 [1] 。 注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。
提示:
nums1.length == m + n
nums2.length == n
0 <= m, n <= 200
1 <= m + n <= 200
-109 <= nums1[i], nums2[j] <= 109
解析代码
C语言写过了,双指针
class Solution {
public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {int end = m + n - 1; // 双指针if(m == 0){nums1[0] = nums2[0];}while(n > 0 && m > 0){if(nums1[m-1] >= nums2[n-1]) // 小的放后面{nums1[end--] = nums1[m-1];m--;}else{nums1[end--] = nums2[n-1];n--;}}while(n > 0) // 第二个数组还有就拷贝过去{nums1[end--] = nums2[n-1];n--;}}
};
349. 两个数组的交集
给定两个数组 nums1
和 nums2
,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4] 解释:[4,9] 也是可通过的
提示:
1 <= nums1.length, nums2.length <= 1000
0 <= nums1[i], nums2[i] <= 1000
解析代码
class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_set s1(nums1.begin(),nums1.end()); // 去重unordered_set s2(nums2.begin(),nums2.end());vector<int> retV;if(s1.size() <= s2.size()){for(const auto& e : s1){if(s2.find(e) != s2.end()){retV.push_back(e);}}}else{for(const auto& e : s2){if(s1.find(e) != s1.end()){retV.push_back(e);}}}return retV;}
};
60. 排列序列
给出集合 [1,2,3,...,n]
,其所有元素共有 n!
种排列。
按大小顺序列出所有排列情况,并一一标记,当 n = 3
时, 所有排列如下:
"123"
"132"
"213"
"231"
"312"
"321"
给定 n
和 k
,返回第 k
个排列。
示例 1:
输入:n = 3, k = 3 输出:"213"
示例 2:
输入:n = 4, k = 9 输出:"2314"
示例 3:
输入:n = 3, k = 1 输出:"123"
提示:
1 <= n <= 9
1 <= k <= n!
解析代码
这题是困难题,和下面一题一样应该不提倡用next_permutation的,但没学高阶算法就先这样用了
next_permutation函数在头文件<algorithm>中,作用是是生成给定序列的下一个较大排序,直到序列按降序排列为止。到这里还需要强调的一点是,如果你希望生成所有的排列方式,一定要先将序列按升序排列,这里可以与sort函数结合起来使用,先用sort升序排列,再调用next_permutation函数。
class Solution {
public:string getPermutation(int n, int k) {string str = string("123456789").substr(0,n);while(--k){next_permutation(str.begin(), str.end());}return str;}
};
46. 全排列
给定一个不含重复数字的数组 nums
,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
示例 1:
输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
示例 2:
输入:nums = [0,1] 输出:[[0,1],[1,0]]
示例 3:
输入:nums = [1] 输出:[[1]]
提示:
1 <= nums.length <= 6
-10 <= nums[i] <= 10
nums
中的所有整数 互不相同
解析代码
提倡不用next_permutation的,但没学高阶算法就先这样用了,先用sort升序排列
class Solution {
public:vector<vector<int>> permute(vector<int>& nums) {vector<vector<int>> vv;sort(nums.begin(), nums.end());do{vv.push_back(nums);}while(next_permutation(nums.begin(), nums.end()));return vv;}
};
本篇完。
C++到这基本介绍了,有时间可以回去复习复习,还有一两篇关于多线程的问题放到Linux操作系统之后再放出来了,到这C++也够用了。
下一篇:零基础Linux_1(前期准备)Linux发展史和环境安装。
下下篇:零基础Linux_2(基本指令_上)目录/文件的显示跳转创建删除。
相关文章:
从C语言到C++_39(C++笔试面试题)next_permutation刷力扣
这篇就一直更新一些C的选择题和编程题了。 目录 笔试题1 答案及解析1 笔试题2 答案及解析2 力扣编程题 88. 合并两个有序数组 解析代码 349. 两个数组的交集 解析代码 60. 排列序列 解析代码 46. 全排列 解析代码 本篇完。 笔试题1 1. 以下哪种STL容器中的对象…...

适用于Linux的Windows子系统(系统安装步骤)
目录 前言 一、WSL2安装 1.Microsoft参考文档(推荐选择旧版 WSL 的手动安装步骤) 2.开启子系统 二、Ubuntu安装 1.在Microsoft Store中获取ubuntu 2.运行ubuntu配置管理信息 3.ubuntu换源 三、WSL 与 Ubuntu的一些基础使用命令 四、Windows Terminal终端…...

HarmonyOS/OpenHarmony(Stage模型)应用开发组合手势(二)并行识别
并行识别组合手势对应的GestureMode为Parallel。并行识别组合手势中注册的手势将同时进行识别,直到所有手势识别结束。并行识别手势组合中的手势进行识别时互不影响。 以在一个Column组件上绑定点击手势和双击手势组成的并行识别手势为例,由于单击手势和…...

如何使用GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图
GPT对于每个科研人员已经成为不可或缺的辅助工具,不同的研究领域和项目具有不同的需求。例如在科研编程、绘图领域: 1、编程建议和示例代码: 无论你使用的编程语言是Python、R、MATLAB还是其他语言,都可以为你提供相关的代码示例。 2、数据可…...

Blender中的高级边缘控制和纹理映射
推荐:使用 NSDT场景编辑器 快速搭建3D应用场景 步骤 1 首先,您需要创建一组无阴影材质,每种材质具有不同的颜色,确保您有足够的材质来覆盖模型,而不会有相同的颜色相互重叠。然后,切换到“着色”ÿ…...

从0开始学go第四天
模板继承 继承根模板,重新定义“块模板” 【Go Web开发系列教程】07-Go模板继承_哔哩哔哩_bilibili 解析模板时,base模板要在前 渲染模板时: 要用ExecuteTemplate,而不是Excute 模板补充:Go语言标准库之http/templ…...

【飞书ChatGPT机器人】飞书接入ChatGPT,打造智能问答助手
文章目录 前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 前言 在飞书中创建chatGPT机器人并且对话,在下面操作步骤中…...

vue3集成jsoneditor
一、背景 之前在做录制回放平台的时候,需要前端展示子调用信息,子调用是一个请求列表数组结构,jsoneditor对数组的默认展示结构是[0].[1].[2]..的方式,为了达到如下的效果,必须用到 onNodeName的钩子函数,…...
自然语言处理 中文停用词词典
我整合了4个常用的中文停用词词典(https://gitcode.net/mirrors/goto456/stopwords/-/tree/master),剔除了其中的非中文词汇,得到停用词词典如下,可直接取用。 看见 并不是 有著 岂非 毫无保留地 这样 么 哎呀 互相 通…...

CocosCreator3.8研究笔记(十)CocosCreator 图像资源的理解
一、图像资源导入 Cocos Creator 可使用图像文件格式,支持 JPG、PNG、BMP、TGA、HDR、WEBBP、PSD、TIFF 等。 将图像资源直接拖拽到 资源管理器 即可将其导入 二、图像资源的类型 在 属性检查器 面板中便可根据需要设置图像资源的使用类型:raw 、 textu…...

计算机使用中常用截图与标注方法
一、截图常用方法 1.windows自带快捷键 Print Screen SysPq 截取全屏,可以粘到word文档中,可以粘贴到"画图"程序中,命名一个文件名,另存为图片,或.jpg后缀,或.png后缀 alt Print S…...

Elasticsearch,Logstash和Kibana安装部署(ELK Stack)
前言 当今数字化时代,信息的快速增长使得各类组织和企业面临着海量数据的处理和分析挑战。在这样的背景下,ELK Stack(Elasticsearch、Logstash 和 Kibana)作为一套强大的开源工具组合,成为了解决数据管理、搜索和可视…...

MATLAB中movmean函数用法
目录 语法 说明 示例 向量的中心移动平均值 向量的尾部移动平均值 矩阵的移动平均值 包含缺失值的向量的移动平均值 基于样本点计算移动平均值 仅返回满窗口平均值 movmean函数的功能是对数据进行移动求平均值。 语法 M movmean(A,k) M movmean(A,[kb kf]) M mov…...

IIS短文件名泄露漏洞复现
IIS短文件名泄露漏洞复现 前言一、漏洞描述二、漏洞原理1.什么是短文件2.短文件特征 三、漏洞验证三、漏洞防御总结 前言 IIS短文件名泄露漏洞比较老了,而且只适合于windowsiisasp的网络结构,所有如下的复现步骤看下就行了,关键是要弄懂原理…...

万字解读 Android 车机核心 :CarService 的构成和链路~
前言 关于 Android 车机,之前分析过方控上自定义按键的输入机制和中控上旋钮输入的原理,但都局限于 Car Service 内 Input 相关模块。 一文了解 Android 车机如何处理中控的旋钮输入从实体按键看 Android 车载的自定义事件机制 本文将结合 Android 系…...
C#使用Panel
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System...
Jabbi的Rust学习日记(一)
Rust环境安装 Windows:Install Rust - Rust Programming Language (rust-lang.org) 访问网页,下载64bit | 32bit 版本 下载完成后打开,直接enter即可 Linux:输入指令 curl https://sh.rustup.rs-sSf | sh 我会报错,好像是链接不到这个网址&a…...

电脑磁盘分区形式是什么?如何更改?
磁盘分区形式介绍 在了解为什么以及如何更改分区形式之前,让我们对磁盘分区形式有一个基本的了解。一般来说,分区形式是指主引导记录(MBR)和 GUID 分区表(GPT)。 MBR和GPT是Windows系统中常用…...

Outlook无需API开发连接钉钉群机器人,实现新增会议日程自动发送群消息通知
Outlook用户使用场景: 在企业中,会议和活动的顺利举行对于业务运转和团队协作至关重要。然而,计划的变动总是无法避免,这可能会导致其他人的计划受到影响,打乱原有的安排。为了解决这个问题,许多企业开始使…...

elasticsearch分析插件 安装analysis-ik
首先下载安装es 和 插件 ,注意 两者的版本要保持一致,如果要用到kibana 则三者保持一致 ik:https://github.com/medcl/elasticsearch-analysis-ik/releases es/kibana:https://www.elastic.co/cn/downloads/past-releases/ 然后在 es— elast…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...