阿里云如何做网站中电科工程建设有限公司网站

当前位置: 首页 > news >正文

阿里云如何做网站,中电科工程建设有限公司网站,苏醒的wordpress主题怎么样,云南建设人力资源网站这篇就一直更新一些C的选择题和编程题了。 目录 笔试题1 答案及解析1 笔试题2 答案及解析2 力扣编程题

  1. 合并两个有序数组 解析代码
  2. 两个数组的交集 解析代码
  3. 排列序列 解析代码
  4. 全排列 解析代码 本篇完。 笔试题1
  5. 以下哪种STL容器中的对象…这篇就一直更新一些C的选择题和编程题了。 目录 笔试题1 答案及解析1 笔试题2 答案及解析2 力扣编程题 88. 合并两个有序数组 解析代码 349. 两个数组的交集 解析代码 60. 排列序列 解析代码 46. 全排列 解析代码 本篇完。 笔试题1
  6. 以下哪种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.vectorint::iterator支持“”、“”、“”等操作符 D.listint::iterator则不支持“”、“”、“”等操作符运算但是支持了[ ]运算符 6. 关于vector初始化问题下面那个是非法的?  A.vectorstring sVec B.vectorvectorint ivvec; C.vectorvectorstring 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
  7. 下面关于适配器说法正确的是 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. nextpermutation()算法的功能是____________________________________ 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 last1first2last2 resutl)算法的功能是将两个有序序列合并成一个序列保存到result中合并好之后依然有序reverse(first last)算法的功能是对[first, last)区间中的元素逆序unique(first, last)算法的功能是对[first, last)区间中的元素去重next_permutation(firstlast)算法的功能是获取当前序列的下一个排列组合sort(firstlast)算法的功能是对[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 nnums2.length n0 m, n 2001 m n 200-109 nums1[i], nums2[j] 109 解析代码 C语言写过了双指针 class Solution { public:void merge(vectorint nums1, int m, vectorint 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 10000 nums1[i], nums2[i] 1000 解析代码 class Solution { public:vectorint intersection(vectorint nums1, vectorint nums2) {unordered_set s1(nums1.begin(),nums1.end()); // 去重unordered_set s2(nums2.begin(),nums2.end());vectorint 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 时, 所有排列如下 123132213231312321 给定 n 和 k返回第 k 个排列。 示例 1 输入n 3, k 3 输出213示例 2 输入n 4, k 9 输出2314示例 3 输入n 3, k 1 输出123 提示 1 n 91 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] 10nums 中的所有整数 互不相同 解析代码 提倡不用next_permutation的但没学高阶算法就先这样用了先用sort升序排列 class Solution { public:vectorvectorint permute(vectorint nums) {vectorvectorint 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基本指令_上目录/文件的显示跳转创建删除。