- 博客(37)
- 收藏
- 关注

原创 数据结构易错100题
链表的物理存储结构具有同链表一样的顺序()。答案:正确。物理存储结构不连续。已知某二叉树的前序为(1-2-3-4-5-6-7-8-9),中序为(2-3-1-6-7-8-5-9-4),则它的后续为?答案:3-2-8-7-6-9-5-4-1。设栈最大长度为 3 ,入栈序列为 1 , 2 , 3 , 4 , 5 , 6 ,则不可能得出栈序列是()A.1 , 2 , 3 , 4 , 5 , 6B.2 , 1 , 3 , 4 , 5 , 6C.3 , 4 , 2 , 1 , 5 , 6..
2021-10-01 00:27:17
2517
原创 输出蛇形矩阵
从左上角填上 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 3 个字符,前面使用空格补齐。给出一个不大于 9 的正整数。
2023-07-12 13:49:37
336
原创 二维矩阵左转
个 整数,表示矩阵A的元素。相邻两个整数之间用单个空格隔开,每个元素均在。列开始,逐列逐行进行输入(输入完当前列所有行元素之后再去输入下一列元素)列开始,逐行逐列进行输入(输入完当前行所有列之后再去输入下一行元素)个整数,为矩阵旋转之后的结果。相邻两个整数之间用单个空格隔开。列的矩阵,让矩阵向左翻一个。行所有元素之后才会开始第。,表示矩阵的行数和列数。
2023-07-12 13:12:19
552
原创 第14届蓝桥杯STEMA国赛C++中高级组题目题解
选择题DCa出栈时错误Cf(1) = 1f(2) = 1f(3) = 2 * 1 + 1 = 3f(4) = 2 * 1 + 3 = 5f(5) = 2 * 3 + 5 = 11f(6) = 2 * 5 + 11 = 21f(7) = 2 * 11 + 21 = 43AB对象销毁时,需要调用析构函数。是一种特殊的成员函数,没有返回值,没有参数,不能被重载,因此一个类只能有一个析构函数。构造函数的名字和类名相同,而析构函数的名字是在类名前面加一个~符号。如果用户没有定义,编译器
2023-06-14 15:10:45
730
原创 第14届蓝桥杯STEMA国赛C++中高级组题目
以下选项中,没有利用“比较”操作的算法是( )。A.选择排序B.冒泡排序C.插入排序D.桶排序假设入栈顺序为 a、b、c、d、e,则出栈序列不可能是( )。执行以下代码,输出的结果是( )。A.21B.41C.43D.45已定义字符串 string s = “Let it Be”,下列哪个选项可以获得字符串的长度( )。A.s.size()B.len(s)以下关于C++类的说法,正确的是( )。
2023-06-14 14:33:04
716
原创 模板详解(template)
模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。模板是一种对类型进行参数化的工具;通常有两种形式:函数模板和类模板;函数模板针对仅参数类型不同的函数;类模板针对仅数据成员和成员函数类型不同的类。使用模板的目的就是能够让程序员编写与类型无关的代码。比如编写了一个交换两个整型int 类型的swap函数,这个函数就只能实现int 型,对double,字符这些类型无法实现,要实现这些类型的交换就要重新编写另一个
2021-10-08 15:16:38
636
原创 自动类型推导(auto)与类型获取(decltype)
auto话说C语言还处于K&R时代,也有auto a = 1;的写法。中文译过来叫自动变量,跟 c++11 的不同,C 语言的 auto a = 1; 相当与 auto int a = 1; 语句。 而 C++11 的 auto 是有着严格的类型推导出来的。以前是这么写int a = 1;现在,编译器知道a是int型了。所以可以这么写auto a = 1;对于类型比较长的,如vector<string>::iterator这类的,能少敲些字符了。如果仅仅就这点作用,那么对编程
2021-10-08 13:29:13
450
原创 int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t区别
工作中经常碰到int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t等数据类型,所以有必要对此进行梳理。int_t同类int_t 为一个结构的标注,可以理解为type/typedef的缩写,表示它是通过typedef定义的,而不是一种新的数据类型。因为跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以最有效的维护代码。int8_t : typedef signed char;uint8_t : typedef un
2021-10-03 14:21:08
8396
原创 LeetCode 169. 多数元素
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/majority-element著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。题解因为多数元素的出现次数大于 ⌊ n/2 ⌋ ,所以多数
2021-09-30 19:45:42
341
原创 LeetCode 517. 超级洗衣机
假设有 n 台超级洗衣机放在同一排上。开始的时候,每台洗衣机内可能有一定量的衣服,也可能是空的。在每一步操作中,你可以选择任意 m (1 <= m <= n) 台洗衣机,与此同时将每台洗衣机的一件衣服送到相邻的一台洗衣机。给定一个整数数组 machines 代表从左至右每台洗衣机中的衣物数量,请给出能让所有洗衣机中剩下的衣物的数量相等的 最少的操作步数 。如果不能使每台洗衣机中衣物的数量相等,则返回 -1 。示例1:输入:machines = [1,0,5]输出:3解释:第一步:
2021-09-29 18:29:15
115
原创 经典算法题1:找出数组中只出现一次的数字,其它数字都出现了两次
题目: 一个整型数组里除了一个数字之外,其它的数字都出现了两次。请写程序找出这个只出现一次的数字。要求: 要求时间复杂度是 O(n) ,空间复杂度是 O(1) 。题解其它数字都出现了两次,只有一个数出现了一次。可以想到运用异或运算,任何一个数字异或它自己都等于0。样例:2 3 4 2 3所有数字依次异或运算:2 xor 3 xor 4 xor 2 xor 3 = (2 xor 2) xor (3 xor 3) xor 4= 0 xor 0 xor 4 = 4最终结果4就是我们要找的那个
2021-09-29 13:42:59
1978
原创 反转字符串的函数(reverse)
该函数定义在#include <algorithm>头文件中reverse 函数是反转容器中的内容,对字符数组无效#include <iostream>#include <string>#include <algorithm>using namespace std;int main(){ string s= "hello"; reverse(s.begin(),s.end()); cout<<s<<
2021-09-29 12:02:15
2302
原创 全排列 (next/prev_permutation) 的使用
函数模板:next_permutation(arr, arr + size); 当有下一个较大值返回 1 , 否则返回 0 ;prev_permutation(arr, arr + size); 当有下一个较小值返回 1 , 否则返回 0;解释: arr为数组, size为数组长度; 按字典序比大小.int arr2[] = {3, 2, 1};cout<<"用prev_permutation对3 2 1的全排列"<<endl;do { cout <<
2021-09-29 11:59:18
221
原创 最大/最小元素(max/min_element)
该函数定义在#include<algorithm>头文件中函数模板:max_element(arr, arr + size); 返回最大值的地址(迭代器) ;min_element(arr, arr + size); 返回最小值的地址(迭代器);解释: arr为数组, size为数组长度; 按字典序比大小.对于 n 行 m 列的二维数组用法: max/min_element(&arr[0][0], &arr[n - 1][m]);int arr[] = {
2021-09-29 11:54:05
334
原创 accumulate 的用法
accumulate 定义在#include<numeric>中,作用有两个,一个是累加求和,另一个是自定义类型数据的处理。累加求和int a[5] = {0, 1, 3, 4, 5};int sum = accumulate(vec.begin() , vec.end() , 0); accumulate 有三个参数:头两个参数是要累加的元素范围,第三个参数是累加的初始值。accumulate 函数将它的一个内部变量设置为一个指定的初始值,然后在此初值上累加输入范围内所有元素的值
2021-09-29 11:45:39
2102
原创 LeetCode 371. 两整数之和
给你两个整数 a 和 b ,不使用 运算符 + 和 - ,计算并返回两整数之和。提示:-1000 <= a, b <= 1000示例 1:输入:a = 1, b = 2输出:3示例 2:输入:a = 2, b = 3输出:5题解使用位运算先计算 a & b (与 and ,&)的值 item ,因为当两个数的二进制同一位上都是 1 时需要进位,将 item 又移一位,得到进位的值,当没有进位的时运算结束。计算出 a ^ b (亦或 xo
2021-09-26 20:03:27
107
原创 第六篇:输入输出(cin 和 cout)
在C语言中,我们通常会使用 scanf 和 printf 来对数据进行输入输出操作。在C++语言中,C语言的这一套输入输出库我们仍然能使用,但是 C++ 又增加了一套新的、更容易使用的输入输出库。【例1】简单的输入输出代码示例:#include<iostream>using namespace std;int main(){ int x; float y; cout << "Please input an int number:" << e
2021-09-26 19:37:46
1123
原创 第五篇:C++ 头文件和 std 命名空间
C++ 是在 C 语言基础上开发的,早期的 C++ 还不完善,不支持命名空间,没有自己的编译器,而是将 C++ 代码翻译成 C 代码,在通过 C 编译器完成编译。这个时候的 C++ 仍然是在使用 C 语言的库,stdio.h、stdlib.h、string.h 等头文件依然有效;此外 C++ 也开发了一些新的库,增加了自己的头文件,例如:iostream.h:用于控制台输入输出头文件。fstream.h:用于文件操作的头文件。complex.h:用于复数计算的头文件。和 C 语言一样,C++ 头
2021-09-25 15:58:05
295
原创 LeetCode 430. 扁平化多级双向链表
多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。给你位于列表第一级的头节点,请你扁平化列表,使所有结点出现在单级双链表中。示例1:输入:head = [1,2,3,4,5,6,null,null,null,7,8,9,10,null,null,11,12]输出:[1,2,3,7,8,11,12,9,10,4,5,6]解释:扁平化后的链表如下图:示例
2021-09-24 18:04:14
94
原创 第四篇:C++ 命名空间详解
一个中大型软件往往由多个程序员共同开发,会使用大量变量和函数,不可避免会出现变量或函数的命名冲突。当所有人的代码都测试通过,没有问题时,将它们结合到一起就有可能出现命名冲突。例如小明和小红都参加了一个文件管理系统的开发,它们都定义了一个全局变量 fp ,用来指明当前打开的文件,将他们的代码整合到一起编译时,很明显编译器会提示 fp 重复定义(Redefinition)错误。为了解决合作开发时的命名冲突问题,C++ 引入了命名空间(Namespace)的概念。请看下面的例子:namespace Ming
2021-09-24 17:00:24
181
原创 第三篇:如何编译和运行 C++ 程序
C++ 和 C 类似,都要经过编译和链接后才能运行。下图是 C/C++ 代码生成可执行文件的过程:C++ 源文件的后缀C 语言源文件的后缀非常统一,在不同的编译器下都是.c。C++ 源文件的后缀则有些混乱,不同的编译器支持不同的后缀,下表是一个简单的汇总: 编译器 Microsoft Visual C++ GCC(GNU C++) Borland C++ UNIX 后缀 cpp、cxx、cc cpp、cxx、cc、c
2021-09-23 16:05:54
1629
原创 第二篇:面向对象编程(Object Oriented Programming,OOP)
类是一个通用的概念,C++、Java、C#、PHP 等很多编程语言都支持类,都可以通过类创建对象。可以将类看做是结构体的升级版。因为这些语言都支持类,所以使用这些语言别写成语也被成为面向对象编程,这也语言也被成为面向对象编程的语言。C 语言因为不支持类和对象的概念,被成为面向过程的编程语言。在 C 语言中,我们会把重复使用或者具有某项功能的代码封装成一个函数,将拥有相关功能的多个函数封装在一个源文件,再提供对应的头文件,这就是模块。使用模块时,引入对应的头文件就可以。而在 C++ 中,多了一层封装,就
2021-09-23 15:26:25
196
原创 第一篇:C++ 类和对象
C++ 是一门面向对象的编程语言,理解 C++ ,首先要理解类(Class)和对象(Object)这两个概念。C++ 中的类(Class)可以看做 C 语言中结构体(struct)的升级版。结构体是一种构造类型,可以包含若干成员变量,每个成员变量类型不同;可以通过结构体来定义结构体变量,每个变量具有相同的性质。例如:#include<stdio.h>//定义结构体struct Student{ //结构体包含的成员变量 char *name; int age; float sc
2021-09-22 13:49:15
104
原创 LeetCode 678. 有效的括号字符串
题目给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:任何左括号 ( 必须有相应的右括号 )。任何右括号 ) 必须有相应的左括号 ( 。左括号 ( 必须在对应的右括号之前 )。*可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串。一个空字符串也被视为有效字符串。注意:字符串大小将在 [1,100] 范围内。示例1:输入: “()”输出: True示例2:输入: “(*)”输出: True示例
2021-09-12 12:02:08
95
原创 && 和 || 的判断规则
&& 和 || 如果左方的判断为false,则不进行右方的判断。所以写条件语句时,将容易不满足的条件放到前面可以降低一定的运行时间。
2021-09-11 13:21:59
746
原创 vector 的使用
定义格式:vector < typename > name;eg:vector< int> a[n]:定义了一个行数为n,列数不固定的整形二维数组avector< vector< int > >a:定义了一个行数,列数都不固定的整形二维数组avector< int > a(n):定义了一个元素个数为n的整形数组avector< vector< int> >a(n,vector< int>(m)):定义
2021-05-10 16:45:50
1072
原创 [USACO2020Dec铜组第二题] 雏菊(Daisy Chains)
题目描述每天,作为她绕农场行走的一部分,奶牛 Bessie 会经过她最喜爱的草地,其中种有 N 朵花(五颜六色的雏菊),编号为 1…N(1≤N≤100),排列成一行。花 i 有 pi 朵花瓣(1≤pi≤1000)。作为一名崭露头角的摄影家,Bessie 决定给这些花拍些照片。具体地说,对于每一对满足 1≤i≤j≤N 的花 (i,j),Bessie 会给从花 i 到花 j 之间的所有花(包括 i 和 j)拍一张照。后来 Bessie 查看这些照片时注意到有些照片里存在「平均」的花——一朵恰好有 P 朵.
2020-12-25 10:40:57
1548
2
原创 [USACO2020Dec铜组第一题]ABC(Do You Know Your ABCs)
题目描述Farmer John 的奶牛正在 “mooZ” 视频会议平台上举行每日集会。她们发明了一个简单的数字游戏,为会议增添一些乐趣。Elsie 有三个正整数 A、B 和 C(A≤B≤C)。这些数字是保密的,她不会直接透露给她的姐妹 Bessie。她告诉 Bessie 七个范围在 1…109 之间的整数(不一定各不相同),并宣称这是 A、B、C、A+B、B+C、C+A 和 A+B+C 的某种排列。给定这七个整数,请帮助 Bessie 求出 A、B 和 C。可以证明,答案是唯一的。输入输入一行,.
2020-12-25 10:35:52
910
原创 [USACO2020Dec铜组第三题]奶牛啃草(Stuck in a Rut)
题目描述Farmer John 最近扩大了他的农场,从奶牛们的角度看来这个农场相当于是无限大了!奶牛们将农场上放牧的区域想作是一个由正方形方格组成的无限大二维方阵,每个方格中均有美味的草(将每个方格看作是棋盘上的一个方格)。Farmer John 的 N 头奶牛(1≤N≤50)初始时位于不同的方格中,一部分朝向北面,一部分朝向东面。每一小时,每头奶牛会执行以下二者之一:如果她当前所在的方格里的草已经被其他奶牛吃掉了,则她会停下。吃完她当前所在的方格中的所有草,并向她朝向的方向移动一个方格。经过一.
2020-12-25 10:20:56
2495
2
原创 为什么负负得正
为什么 (-1)×(-1)=1?已知:1乘任何数都等于它本身0乘任何数都等于0① 1-1=0② 1 + (-1) = 0③ 等式两边同时乘以-1:1×(-1) + (-1)×(-1) = 0×1④ 通过已知:(-1) + (-1)×(-1) = 0⑤ 交换加数位置:(-1)×(-1) +(-1) = 0 >> (-1)×(-1) - 1 = 0故(-1)×(-1) = 1...
2020-12-21 01:27:50
716
原创 欧几里得算法
欧几里得算法欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。欧几里得算法和扩展欧几里得算法可使用多种编程语言实现。int gcd(int x,int y){ if(x%y==0){ return y; } else gcd(y,x%y);}假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行
2020-12-18 15:09:57
606
原创 关于二分查找lower_bound( )和upper_bound( )的常见用法
关于lower_bound( )和upper_bound( )的常见用法头文件:#include < algorithm >二分查找的函数有 3 个:lower_bound(起始地址,结束地址,要查找的数值)从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。upper_bound(起始地址,结束地址,要查找的数值)从数组的begin位置到end-1位置
2020-12-18 15:07:42
302
原创 数列反转
数列反转反转[x,y]内的所有数字例:数列a:1,2,3,4,5,6,7,8,9,10反转[2,6]反转后数列a:1,6,5,4,3,2,7,8,9,10总结:如果x<=a[i]<=y,a[i]=x+y-a[i]
2020-12-18 15:06:39
490
原创 王老师喜欢哪张牌?
扑克牌问题结论:王老师喜欢方块五A:我不知道是哪张解读:王老师喜欢的牌同点色有不同花色排除黑桃 2,3,7,8,J梅花 6,K剩余黑桃 4红桃 A,4,Q梅花 4,5,Q方块 A,5B:我知道你不知道,但是我也不知道解读:说明同色的所有的牌都有其他颜色存在,并且同色牌不止1张eg:如果是B得到的信息是黑桃,那么A说了第一句话之后,A就能够确定牌排除黑桃 4梅花 4,5,Q剩余红桃 A,4,Q方块 A,5A:那我知道了解读:A知道的是点数,所以在剩下的牌中某张牌只
2020-12-18 15:04:49
179
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人