- 博客(44)
- 收藏
- 关注
原创 110. 平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL
2020-07-22 16:18:37
196
原创 101. 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: bool _is
2020-07-22 15:09:52
146
原创 100. 相同的树
给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; *
2020-07-22 14:45:07
172
原创 剑指offer-二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: void Mirror(TreeNode *pRoot) { if(pRoot=
2020-07-22 12:41:03
137
原创 104. 二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最大深度 3 。后序遍历方式根节点高度=Max(左子树高度,右子树高度)+1;/** * Definition for a binary tree node. * struct TreeNode { * int val; * s
2020-07-22 12:11:42
132
原创 965. 单值二叉树
如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。示例 1:输入:[1,1,1,1,1,null,1]输出:true示例 2:输入:[2,2,2,5,2]输出:false提示:给定树的节点数范围是 [1, 100]。每个节点的值都是整数,范围为 [0, 99] 。/** * Definition for a binary tree node. * struct TreeNode { * i
2020-07-22 10:38:35
102
原创 this指针
1.this指针的引入class Date{public: void Show() { cout << _year << "-" << _month << "-" << _day << endl; } void Set(int year, int month, int day) { _year = year; _month = month; _day = day; }private: int _ye
2020-06-27 11:28:17
139
原创 指针空值nullptr
1.C++98中的指针空值声明一个变量时最好给该变量一个合适的初始值,否则可能会出现不可预料的错误,比如未初始化的指针。如果一个指针没有合法的指向,我们基本都是按照如下方式对其进行初始化:void TestPtr(){ int* p1 = NULL; int* p2 = 0;}NULL实际是一个宏,在传统的C头文件(stddef.h)中,可以看到如下代码#ifndef NULL#ifdef __cplusplus#define NULL 0#else#define NULL ((v
2020-06-26 15:29:00
676
原创 基于范围的for循环
1.范围for的语法在C++98中如果要遍历一个数组,可以按照以下方式进行:void TestFor(){int array[] = { 1, 2, 3, 4, 5 };for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)array[i] *= 2;for (int* p = array; p < array + sizeof(array)/ sizeof(array[0]); ++p)cout << *
2020-06-26 14:44:53
344
原创 auto关键字
1. auto简介在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,C++11中,标准委员会赋予了auto全新的含义即auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得int TestAuto(){return 10;}int main(){int a = 10;auto b = a;auto c = 'a';auto d = TestAuto();cout <<
2020-06-26 14:27:20
197
原创 引用
引用的概念引用的特性常引用使用场景传值、传引用效率比较引用和指针的区别1.引用的概念引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。类型& 引用变量名(对像名)=引用实体void TestRef(){ int a = 10; int& ra = a; //<--定义引用类型 cout << a << endl; cout << ra <.
2020-06-26 12:27:18
163
原创 队列实现
typedef int QUDataType;typedef struct QueueNode{ struct QueueNode* _next; QUDataType _data;}QueueNode;typedef struct Queue{ QueueNode* _front; // 队头 QueueNode* _rear; // 队尾}Queue;//初始化void QueueInit(Queue* pq){ assert(pq); pq->_front = pq
2020-06-20 12:09:42
158
原创 栈的实现
//支持动态增长的栈typedef int STDataType;typedef struct Stack{ STDataType* _a; int _top; // 栈顶 int _capacity; // 容量}Stack;//初始化void StackInit(Stack* ps){ ps->_a = NULL; ps->_capacity = 0; ps->_top = 0;}//销毁栈void StackDestory(Stack* ps){
2020-06-20 11:31:02
143
原创 结构体传参
结构体传参struct S{ int data[1024]; int num;};struct S s = { {1,2,3,4}, 1000 };//结构体传参void print1(struct S s){ printf("%d\n", s.num);}//结构体地址传参void print2(struct S* ps){ printf("%d\n", ps->num);}int main(){ print1(s); //传结构体 print2(&s
2020-06-17 14:20:04
292
原创 结构体内存对齐
计算计算结构体的大小typedef struct Test{ char a; char b; int c;}Test;int main(){ Test t; printf("%p\n", &t); printf("%p\n",&t.a); printf("%p\n",&t.b); printf("%p\n",&t.c); printf("%d\n",sizeof(t)); system("pause"); return 0;}这个结构体
2020-06-17 13:57:52
126
原创 C字符串函数模拟实现
size_t Strlen(const char* str){ assert(str != NULL); size_t length = 0; for (; str[length] != '\0'; ++length); return length;}char* Strcpy(char* destination, char* source){ //判断参数有效性 //c语言中无法避免野指针 assert(source != NULL && destination !=
2020-06-16 14:50:24
112
原创 C语言数据存储
原码,反码,补码三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位表示方法各不相同。原码直接将二进制按照正负数的形式翻译成二进制就可以。反码将原码的符号位不变,其他位依次按位取反就可以得到了。补码反码+1就得到补码。正数的原、反、补码都相同。对于整形来说:数据存放内存中其实存放的是补码。...
2020-06-14 11:03:01
167
原创 牛客--二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。题目描述交换左右子树的节点再递归调用class Solution {public: void Mirror(TreeNode *pRoot) { if(pRoot==NULL) return; TreeNode *temp=pRoot->left; pRoot->left=pRoot->right; pRoot->right=
2020-06-12 14:07:06
164
原创 牛客--不用加减乘除做加法
题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。在不能使用算数运算符的情况下,首先想到的是位运算先将两个数异或,计算进位:将这两个数相与的结果左移一位将进位与异或结果相加调再用自己。class Solution {public: int Add(int num1, int num2) { int sum=num1^num2; int ret=(num1&num2)<<1; i
2020-06-12 13:35:29
103
原创 牛客--找出所有员工当前薪水salary情况
题目描述找出所有员工当前(to_date=‘9999-01-01’)具体的薪水salary情况,对于相同的薪水只显示一次,并按照逆序显示CREATE TABLE salaries (emp_no int(11) NOT NULL,salary int(11) NOT NULL,from_date date NOT NULL,to_date date NOT NULL,PRIMARY KEY (emp_no,from_date));输入描述:无输出描述:salary946929440
2020-05-21 15:13:12
147
原创 牛客--批量插入数据
题目描述对于表actor批量插入如下数据CREATE TABLE IF NOT EXISTS actor (actor_id smallint(5) NOT NULL PRIMARY KEY,first_name varchar(45) NOT NULL,last_name varchar(45) NOT NULL,last_update timestamp NOT NULL DEFAULT (datetime(‘now’,‘localtime’));actor_id first_na
2020-05-21 14:55:59
159
原创 结构体
结构体类型的声明结构体初始化结构体成员访问结构体传参**结构体类型的声明 **struct tag{member-list;}variable-list;例如typedef struct Stu{char name[20];//名字int age;//年龄char sex[5];//性别char id[20];//学号}Stu;//分号不能丢结构的成员可以是...
2020-05-03 21:55:27
127
原创 指针
1.指针就是变量,用来存放地址的变量(存放在指针中的值都被当成地址处理)。2.指针是用来存放地址的,地址是唯一标识的一块地址空间。3.指针的大小在32位平台是4个字节,在64位平台是8个字节。4.指针也有不同的类型,指针的类型决定对指针解引用的时候有多大的权限(能操作几个字节)。比如char* 的指针解引用就只能访问一个字节,而int*的指针的解引用就能访问四个字节。5.指针和数组:数组名...
2020-05-02 23:30:38
134
原创 操作符
算数运算符+ - * / %除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。% 操作符的两个操作数必须为整数。返回的是整除之后的余数...
2020-05-01 22:29:26
239
原创 数组作为函数参数
这里用冒泡排序举例#include <stdio.h>#include<Windows.h>void bubble_sort(int arr[],int sz){ int i = 0; for (i = 0; i < sz - 1; i++) { int j = 0; for (j = 0; j < sz - i - 1; j++) {...
2020-04-29 23:33:24
125
原创 二维数组
二维数组的创建//数组创建int arr[3][4];char arr[3][5];double arr[2][4];二维数组的初始化//数组创建int arr[3][4];char arr[3][5];double arr[2][4];//数组初始化int arr[3][4] = {1,2,3,4};int arr[3][4] = {{1,2},{4,5}};int ...
2020-04-29 16:03:07
115
原创 一维数组
一维数组定义:type_t arr_name [const_n];//type_t 是指数组的元素类型//const_n 是一个常量表达式,用来指定数组的大小//如以下几种//代码1int arr1[10];//代码2int count = 10;int arr2[count];//数组时候可以正常创建?//代码3char arr3[10];float arr4[1];...
2020-04-29 15:26:44
118
原创 函数的递归调用
程序调用自身的编程技巧成为递归,它可以将一个大型复杂的问题层层分解成与原问题相似的小问题通过少量的代码达到大事化小。递归的两个必要条件1.存在限制条件,当满足这个限制条件的时候,递归便不再继续。2.每次递归在这里插入代码片调用之后越来越接近这个限制条件。//不创建临时变量求字符串长度#include<stdio.h>#include<Windows.h>int...
2020-04-28 21:38:21
175
原创 函数
库函数&&自定义函数常见库函数:IO函数字符串操作函数字符操作函数内存操作函数时间/日期函数数学函数其他库函数自定义函数由程序员自己设计和库函数一样有函数名,返回值类型和参数。ret_type fun_name(para1, * ){statement;//语句项}ret_type 返回类型fun_name 函数名para1 函数参数例如比较两...
2020-04-28 14:52:08
147
原创 循环语句
while&&for&&do whilewhile//while 语法结构while(表达式)循环语句在while 循环中:只要遇到break,就停止后期的所有的循环,直接终止循环。 所以:while中的break是用于永久终止循环的。continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语...
2020-04-23 14:53:57
118
原创 分支语句
if语句(选择结构)语法结构:if(表达式)语句;if(表达式)语句1;else语句2;//多分支if(表达式1)语句1;else if(表达式2)语句2;else语句3;if书写格式对比//代码1if (condition)return x;return y;//代码2if(condition){return x;}else{return ...
2020-04-21 16:18:36
124
原创 变量,常亮
变量–会改变的值;常量–不会变的值;变量变量的定义例如:int age = 150;float weight = 45.5f;char ch = ‘w’;变量分为局部变量和全局变量,当局部变量和全局变量同名时优先使用局部变量;作用域局部变量的作用域是变量所在的局部范围。全局变量的作用域是整个工程。生命周期局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。...
2020-04-21 15:49:38
288
原创 实现函数 ToLowerCase() ,该函数接收一个字符串参数 str ,并将该字符串中的大写字母转换成小写字母, 之后返回新的字符串。
利用大写字母’A’~'Z’的ASCII码值为65-90,小写字母的ASCII码值为97-122两者之间相差32,因此遍历字符串如果是大写字母就给其加上32就可以将其转化成小写字母。```cppclass Solution {public: string toLowerCase(string str) { int i,length=str.size(); ...
2020-02-05 20:47:38
2196
原创 一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。 找出这两个数字,编程实现
要想找到在这个数组中出现了一次的两个数字,可以根据这两个数字异或的结果将这些数字分成两组。如果这两个数字异或的结果的某一位是1,说明这两个数字在这一位上有分歧,通过这以为分别是1或者0,将这个数组分为两组,然后分别异或,就可以找到这两个数字。代码如下:int main(){int arr[10] = { 1,2,3,4,5,6,4,3,2,1 };int i = 0, sum = 0;...
2020-02-02 12:53:55
232
原创 编写程序数一下 1到 100 的所有整数中出现多少次数字9。
1到100中有两种数里面包含9,一类是除以10余数为9如(9,19,29等)一类是除以10的商为9如(90,91,92等),因此只需要将这两种数找到然后每次加1就可以算出出现了多少次9。(另外需注意99在这两类中都成立不要忘了使得结果少了一次)代码如下:int main(){int count = 0;int i = 0;for (i = 0; i < 100; i++){i...
2019-08-24 11:05:39
246
原创 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
建立一个变量a依次除以1到100然后将每次的得到的值相加,a每次循环以后乘以-1这样就可以得到这道题的答案。代码如下:int main(){int i;double a = 1, sum = 0;for (i = 1; i <= 100; i++){sum += a / i;a *= -1;}printf("%f", sum);system(“pause”);ret...
2019-08-24 10:54:48
348
原创 将数组A中的内容和数组B中的内容进行交换。(数组一样大)
这道题和之前交换两个整型变量的方法相同,建立一个中间变量,然后将两个数组的值依次交换就可将这两个数组的内容交换。代码如下:int main(){int a[5] = { 1,2,3,4,5 };int b[5] = { 9,8,7,6,5 };int tem;int i = 0;for (i = 0; i < 5; i++){tem = a[i];a[i] = b[i]...
2019-08-24 10:47:00
152
原创 求两个数的最大公约数
在两个数取出较小的那个数然后从这个数到0依次循环遍历,即可得到最大公约数。需考虑当最后遍历到1时说明这两个数互质。代码如下:int main(){int a, b;scanf("%d%d", &a, &b);int smaller = a < b ? a : b;int i;int max = 0;for (i = 1; i <= smaller; i...
2019-08-24 10:34:20
218
原创 将三个数按从大到小输出
将三个数从大到小输出,可以将这三个数两两相互比较,将较大的数移到前面将较小的数移到后面然后按顺序输出。代码如下:int main(){int a, b, c;int tem = 0;printf(“请输入三个数:”);scanf("%d%d%d", &a, &b, &c);if (a < b){tem = a;a = b;b = tem;}...
2019-08-22 12:39:22
273
原创 求10 个整数中最大值。
将10个数中的第一个数取出依次与后面的9个数比较如果比这个数大的话将这两个数交换即可。代码如下:int main(){int arr[10] = { 12,32,43,645,65,76,34,87,98,10 };int max = 0;int i = 0;max = arr[0];for (i = 0; i < 10; i ++){if (max < arr[i...
2019-08-22 12:28:18
134
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅