自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 资源 (1)
  • 收藏
  • 关注

原创 Makefile学习

简述Makefile是一种被用作自动化编译,Makefile定义了一系列的规则来指定文件编译顺序,以及哪些文件需要重新编译,甚至可以像shell脚本一样执行操作系统的命令。本篇只是简单概念及使用方式,详细的可参考:C语言中文网-Makefile教程规则普通规则target... : prerequisites ... command ......模块描述target可以是一个object file(目标文件),也可以是一个执行文件,还可以是一个标签(l

2021-12-12 19:00:12 4364

原创 gcc编译工具链使用

简述gcc的全称是GNU Compiler Collection,它是一个能够编译多种语言的编译器。最开始gcc是作为C语言的编译器(GNU C Compiler),现在除了c语言,还支持C++、java、Pascal等语言。gcc支持多种硬件平台。常用参数(大小写敏感)参数作用-o重定向目标文件-E只进行预处理,产物: *.-S编译器执行完编译操作后停止,产物: *.s-c编译器执行完汇编操作后停止,产物 *.o-Wall使gcc对源文件的代码有

2021-12-12 16:31:51 1227

原创 Linux环境下程序编译、链接、执行

编译过程预编译处理读取源码,对源码中文伪指令(以 # 开头)和特殊符号进行处理。生成一个没有宏定义、条件编译指令以及特殊符号的文件。宏替换,对#define、#undef、#、##替换。条件编译,如#ifdef、#ifndef、#else、#elif、#endif。预编译程序将根据相关指令,过滤掉不必要的代码。头文件包含,该阶段会把#include引入的头文件插入到源文件中。特殊符号,预编译程序可以识别一些特殊的符号,例如在源程序中出现的LINE和FILE。预编译程序对于在源程序中出现的这些

2021-12-12 15:35:37 2006 1

原创 二叉树层序遍历

102. 二叉树的层序遍历难度:中等题目给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回其层序遍历结果:[ [3], [9,20], [15,7]]解题:实际上就是广度优先遍历,只不过需要记录每一层的个数。class Solution {public: vector<v

2021-08-03 21:39:01 128

原创 236. 二叉树的最近公共祖先

难度: 中等题目:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例:输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 5 和节点 1 的最近公共祖先是节点 3 。示例:输入:root = [3,5,1,6,2,0

2021-07-29 22:31:11 65

原创 Linux nohup运行导致程序cpu占比100%

问题描述Linux环境下,以nohup方式运行程序,可将终端和程序分离,程序的打印默认情况下会输出到nohup.out文件中。这几天偶然发现以这种方式启动程序,使用top命令查看时,发现程序CPU占用达到了100%而且居高不下。原因程序中有一行读操作代码在循环中执行,而且一直阻塞。而nohup会一直执行写操作,两者相互冲突,导致cpu占比100%。解决一般情况下,以nohup方式执行的程序都不需要读操作阻塞,所以从根源上解决方法就是把这种读操作给去掉,不要一直在循环中阻塞。另一种就是在循环中读操

2021-07-27 22:40:55 1412

原创 124. 二叉树中的最大路径和

难度: 困难(感觉不到)题目:路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。示例: 1 / \ 2 3最优路径 2->1->3,和为6示例: -10 / \ 9 20 / \ 15 7 最

2021-07-27 22:27:26 126

转载 110. 平衡二叉树

难度: 简单题目:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。解题自顶向下从顶向下计算,需要计算每个节点的左右子树高度,并且左右子树各自也要满足平衡,这样在判断左右子树是否平衡时对之前计算过的高度,又重复计算。class Solution {public: int height(TreeNode* root) { if (root == NULL) {

2021-07-25 18:39:26 79

原创 二叉树遍历

二叉树遍历概念前序遍历递归迭代中序遍历后续遍历递归迭代概念访问树中的所有节点,以根节点访问顺序决定是什么遍历,左子树访问顺序都是优于右子树。前序遍历先访问根节点,再前序遍历左子树,再前序遍历右子树。递归void preorderTraversal(TreeNode* root) { if(root == nullptr) return; // 先访问根再访问左右 std::cout << root->iValue << s

2021-07-25 13:42:20 82

原创 338. 比特位计数

难度: 简单题目: 给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:输入: 2输出: [0,1,1]示例 2:输入: 5输出: [0,1,1,2,1,2]解题:x&(x-1) 这个公式很关键,比如5 | 1014 | 1003 | 0112 | 0101 | 0010 | 000每个数字与比它小1的数字进行按位与运算,会将从右至左的最后一个1去掉。对于一个数字去求它二

2021-07-21 23:33:12 159 1

转载 234. 回文链表

难度: 简单题目: 请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true解题:题目如果使用额外的空间实现起来很简单,两次遍历就完成。进阶的方法是将后半部分链表进行反转,查找链表一半的位置,可以用快慢指针的方式,进行遍历,找到中间的节点,将此节点作为头节点,反转剩余部分。偶数情况下反转后:1->2 2<-1奇数情况下反转后:1->2->3 2

2021-07-20 22:59:39 68

原创 C/C++ volite关键字

概念一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。对于一般变量:为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中。以后再取变量值时,就直接从寄存器中取值。注意一个参数既可以是const也可以是volatile:一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它

2021-07-19 22:55:07 1035

原创 226. 翻转二叉树

难度: 简单题目:翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1解题:迭代与递归的思路都一样,都是交换每个节点的子节点,只不过遍历方式不同,迭代需要借用队列遍历。迭代class Solution {public: TreeNode* invertTree(TreeNode* root) {

2021-07-18 21:33:21 49

原创 206. 反转链表

难度: 简单题目: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。解题:迭代采用双指针的方式思路,分别用来记录前一个指针和后一个指针,每次遍历将当前节点的next指向前一个节点。class Solution {public: ListNode* reverseList(ListNode* head) { ListNode* prev = nullptr; ListNode* next = nullptr; while (

2021-07-17 22:14:54 72 1

转载 141. 环形链表

难度: 简单题目:给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释

2021-07-15 22:32:23 63

原创 121. 买卖股票的最佳时机

难度: 简单题目:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:  在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5

2021-07-14 22:58:21 69

原创 Linux下sudo执行程序进程数量有差异

在Linux下以管理员权限执行可执行文件如:sudo ./test查看进程信息ps -ef | grep -v grep | grep test可一看到结果中包含如下信息的记录:root 806 1 0 7月13日 00:00:00 sudo ./testadmin 808 806 0 7月13日 00:00:18 ./test会有两个进程,其中第一个父进程为init进程的这一条,实际上是一个shell程序,它是被sudo命令执行带起来的,具体的原因还需要去看shell的

2021-07-13 23:34:51 1197

转载 104. 二叉树的最大深度

作者:LeetCode-Solution链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/solution/er-cha-shu-de-zui-da-shen-du-by-leetcode-solution/来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。难度: 简单题目:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说

2021-07-13 21:48:49 62

转载 C语言字节对齐

C语言字节对齐参考来源字节对齐概念字节对齐的作用分类结构体对齐简单示例对齐准则参考来源文章主要参考自以下文章,进行整合补充:C语言内存对齐详解C语言字节对齐问题详解什么是字节对齐,为什么需要字节对齐字节对齐概念  在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结构的每个成员按其自然边界(alignment)分配空间。各个成员按照它们被声明的顺序在内存中顺

2021-07-12 23:57:01 2049

原创 101. 对称二叉树

难度: 简答题目:给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3解题可以将整棵树拆分成左右两颗子树来验证对称性,左子树的左节点,等于右子树的右节点;反之亦然。需要同时记录左右两个子树的节点遍历。递归递归思路

2021-07-12 21:09:16 80

转载 const成员只能调用const函数

为什么const对象只能调用const成员函数,而不能调用非const成员函数?在c++中,我们可以用const来定义一个const对象,const对象是不可以调用类中的非const成员函数,这是为什么呢?假设有一个类,名字为test代码如下:class test{   int i; public:   void print();   test(int i); };我们知道c++在类的成员函数中还会隐式传入一个指向当前对象的this指针,所以在test类中,实际的print函数应该是这样

2021-07-08 22:38:12 848

转载 宏和内联函数的区别

1

2021-07-08 22:13:47 243

原创 136. 只出现一次的数字

难度: 简单题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4解题:这道题刚开始考虑半天没思路,不知道怎么用线性时间复杂度解题目,看了答案之后,才知道是再考察位运算。引申出一个知识点:两个相同的十进制数异或的结果一定位零。任何一个数和 0 的异或结果一定是它本身。异或运算满足结合律和交换律。用到本题就可以很简单地得到结果。

2021-07-08 21:51:58 53

原创 94. 二叉树的中序遍历

难度: 简单题目:给定一个二叉树的根节点 root ,返回它的 中序 遍历。解题:迭代中序遍历要对父节点进行记录,遍历完左子节点后再打印父节点,因此借助栈来解题。将当前节点是否为空以及栈是否为空作为循环条件(或关系);若当前节点不为空则将此节点压入栈,使当前节点指针指向左子节点,继续遍历;否则将当前指针指向栈顶并弹出,即此节点的父节点,打印,遍历其右节点。class Solution {public: vector<int> inorderTraversal(TreeNo

2021-07-07 23:26:35 113 2

转载 inline内联函数

特征相当于把内联函数里面的内容写在调用内联函数处;相当于不用执行进入函数的步骤,直接执行函数体;相当于宏,却比宏多了类型检查,真正具有函数特性; 不能包含循环、递归、switch 等复杂操作;在类声明中定义的函数,除了虚函数的其他函数都会自动隐式地当成内联函数。使用// 声明1(加 inline,建议使用)inline int functionName(int first, int secend,...); // 声明2(不加 inline)int functionName(int

2021-07-07 22:32:17 280

转载 this 指针

this 指针是一个隐含于每一个非静态成员函数中的特殊指针。它指向正在被该成员函数操作的那个对象。当对一个对象调用成员函数时,编译程序先将对象的地址赋给 this 指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含使用 this 指针。当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个成员函数所在的对象的指针。this 指针被隐含地声明为: ClassName const this,这意味着不能给this指针赋值;在ClassName类的const成员函数..

2021-07-07 22:13:11 86

原创 c++ static 关键字

全局静态变量在全局变量前加上关键字static,全局变量就定义成一个全局静态变量.静态存储区,在整个程序运行期间一直存在。初始化: 未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化);作用域: 全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾。局部静态变量在局部变量之前加上关键字static,局部变量就成为一个局部静态变量。内存中的位置:静态存储区初始化: 未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的

2021-07-06 23:19:00 81 2

转载 70. 爬楼梯

难度: 简单题目:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意: 给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶解题:这个题在Leetcode上使用递归会超时。

2021-07-06 23:07:14 61

转载 c++ const 关键字

修饰变量,说明该变量不可以被改变;修饰指针,分为指向常量的指针和指针常量;常量引用,经常用于形参类型,即避免了拷贝,又避免了函数对值的修改;修饰成员函数,说明该成员函数内不能修改成员变量。// 类class A{private: const int a; // 常对象成员,只能在初始化列表赋值 public: // 构造函数 A() { }; A(int x) : a(x) { }; // 初始..

2021-07-05 23:03:40 76

原创 53. 最大子序和

难度: 简单题目:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [0]输出:0示例 4:输入:nums = [-1]输出:-1示例 5:输入:nums = [-100000]输出:-10000

2021-07-05 22:51:49 49 1

原创 21. 合并两个有序链表

难度: 简单题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1 = [], l2 = []输出:[]示例3:输入:l1 = [], l2 = [0]输出:[0]解题:这题直接遍历两个链表,对比L1和L2,若L1当前所指元素小则将此结点加入新链表,然后向后移动;L2同理。若有一个链表移动到了结尾,结束遍历,将非结

2021-07-04 21:01:36 78

原创 20. 有效的括号

难度: 简单题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true示例 2:输入:s = "()[]{}"输出:true示例 3:输入:s = "(]"输出:false示例 4:输入:s = "([)]"输出:false示例 5:输入:s = "{[]}"输出:true思路:这道

2021-07-03 23:47:07 50

原创 1863. 找出所有子集的异或总和再求和

难度: 简单一个数组的 异或总和 定义为数组中所有元素按位 XOR 的结果;如果数组为 空 ,则异或总和为 0 。例如,数组 [2,5,6] 的 异或总和 为 2 XOR 5 XOR 6 = 1 。给你一个数组 nums ,请你求出 nums 中每个 子集 的 异或总和 ,计算并返回这些值相加之 和 。注意: 在本题中,元素 相同 的不同子集应 多次 计数。数组 a 是数组 b 的一个 子集 的前提条件是:从 b 删除几个(也可能不删除)元素能够得到 a 。示例 1:输入:nums = [1,

2021-06-30 23:58:04 271 3

原创 26. 删除有序数组中的重复项

难度: 简单题目:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:输入:nums = [1,1,2]输出:2, nums = [1,2]解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。示例 2:输入:nums = [0,0,1,1,1,2,2

2021-06-28 22:59:36 411 1

原创 Linux环境C++编译第三方库调用

-O 指定输出文件名。g++ hello.cpp -o hello -E 预处理,将要包含(include)的文件插入原文件中、将宏定义展开、根据条件编译命令选择要使用的代码,删除所有的注释//和/* */,添加行号和文件名标识,方便后边编译时编译器产生调试用的行号心意以及编译时产生编译错误或警告时能够显示行号。最后将这些代码输出到一个“.i”(预处理文件)中等待进一步处理。g++ -E hello.cpp -o hello.i-S ..

2021-06-14 16:44:36 2233

原创 Qt Md5值计算

通过读取文件计算md5值完成文件校验。1. int CUpgradeLanguage::MD5Check(const QString &strFileName) 2. { 3. QFile file(strFileName); 4. QByteArray fileArray; 5. 6. if (!file.open(QIODevice::ReadOnly)) 7. { 8. //打开失败 9. DL

2021-06-06 22:13:17 1856

转载 Qt调用外部程序

启动外部程序的两种方式:一体式void QProcess::start(const QString & program, const QStringList & arguments, OpenMode mode = ReadWrite) 外部程序启动后。将随主程序的退出而退出。分离式void QProcess::startDetached(const QString & program, const QStringList & arguments, const QSt

2021-06-06 22:10:45 2388

原创 Qt实现下拉框与复选框组合控件

通过对Combox选项进行修改,使用QStandardItemModel存储选项模型。MenuItem.h1. #ifndef MENUITEM_H 2. #define MENUITEM_H 3. 4. #include <QObject> 5. 6. class MenuItem 7. { 8. public: 9. MenuItem(int iMenuId, const QString &strMenuName, bool bIsCh

2021-06-06 21:59:37 1820 2

原创 sql注入与单引号

    在开发工具过程中,需要往数据库中写入英文,其中部分英文存在单引号,在不注意的情况下,直接写sql语句,会引起字符未进行转义而导致sql语句被终止。    单引号对很对计算机语言包括(SQL)是做字符串引用的;但是对SQL语言来说;还有另外一个作用是作引号的转义。总结下:对sql的作用:1、做字符串引用;例如’abc’;表示这是字符串类型;2、做引号的转义。以下为查询 sqlite’ 的语句。SELECT ‘sqlite’’’ FROM test;第一个单引号表示作字符串引用;第二个

2021-04-05 16:13:43 2554

原创 sqlite3踩坑

Sqlite3的使用需要反复确认语句是否执行,执行一次有效的操作需要对sqlite3_stmt进行释放,否则下条语句即便执行成功也会无效。关闭sqlite3,Sqlite3_close函数在使用前,必须先将sqlite3_prepare准备的语句销毁,防止内存泄漏,才能释放数据库资源。...

2021-04-05 16:10:50 256

车牌正负样本训练集.zip

使用者可根据自己的需要选择不同的方式进行训练,车牌正负样本的数据集,该数据集仅包含车牌存在与不存在两种类别。

2020-02-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除