
C++
运气好到爆
点点滴滴记录成长从2022年1月4日起,每周更新三篇文章
展开
-
pre-commit 不执行
git pre-commit的使用原创 2022-06-06 17:36:55 · 1517 阅读 · 0 评论 -
模板太多导致编译太慢,编译出的可执行文件太大?
最近遇到一个问题就是:模板太多导致编译太慢,编译出的可执行文件太大主要原因是我需要传递很多的模板,然而传递模板的时候又有很多事运行时候才能确定的,就用到了switch,通过case实例化的方式进行模板参数定义:如下:template<typename T, int LOOP >void f(const T* a, T* b; int num) {for(int j = 0; j < num; j++) {#pagram unroll for(int i = 0;原创 2021-07-09 10:44:21 · 1090 阅读 · 0 评论 -
numeric_limits<T>::max(),min()及lowest()
td::numeric_limits<T>::max(),min()及lowest()根據std::numeric_limits,如果T屬於浮點數,則: std::numeric_limits<T>::max()回傳該型別的最大值 std::numeric_limits<T>::min()回傳該型別的"最小正數" std::numeric_limits<T>::lowest()回傳該型別的最小值(為負數或0)。如果T屬於整數,...转载 2021-06-11 16:26:08 · 681 阅读 · 1 评论 -
linux基础环境配置--vim, python
1.首先安装vim 各种报错: 404 Not FoundGet:16 http://archive.ubuntu.com/ubuntu xenial/main amd64 zip amd64 3.0-11 [158 kB]Get:17 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 vim-gtk amd64 2:7.4.1689-3ubuntu1.5 [1,222 kB]Fetched 4,479 kB in.原创 2021-05-13 17:39:17 · 187 阅读 · 0 评论 -
逻辑操作获取小于当前数据的最大2的幂
无意中看到了pytorch中关于power(2,floor(log2(n))) 的操作方法, 其c++运行时间:方法1: 使用math自带的log函数以及power进行计算:(我实现的,有点蠢,,,,)static inline int GetLastPow2(int n) { n = log2(n); n = max(0, n); return std::pow(2, n);}方法2: pytorch实现的,通过位移以及逻辑或的方式计算:(nice。。。)static.原创 2021-05-11 15:06:15 · 530 阅读 · 0 评论 -
Welford迭代法:渐进式计算平均值(Mean)和方差(Variance)
https://marvinsblog.net/post/2018-06-26-running-variance/https://blog.youkuaiyun.com/trailbrazer/article/details/108839088原创 2021-03-26 15:33:19 · 3148 阅读 · 0 评论 -
Euclid‘s algorithm.欧几里得算法
之前上学的时候就学了这个算法,一直觉得没啥用,后来写代码遇到了欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。C++17之后可以通过std::gcd的方式使用。假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行的:1997 / 615 = 3 (余 152)615 / 152 = 4(余7)152 / 7 = 21(余5)7 / 5原创 2021-03-24 11:31:48 · 346 阅读 · 0 评论 -
类模板的成员函数及类的成员模板函数的特化C
原文:https://blog.youkuaiyun.com/jfkidear/article/details/24656929?utm_medium=distribute.pc_relevant.none-task-blog-searchFromBaidu-6.control&dist_request_id=1328656.763.16158121886674405&depth_1-utm_source=distribute.pc_relevant.none-task-blog-searchFromB转载 2021-03-15 20:49:51 · 612 阅读 · 0 评论 -
结构体内的函数
结构体内也是可以添加函数的,找了很久发现都是定义和实现都是写在一起的。以下代码来源:链接include<stdio.h>#include<malloc.h>struct Hello{ void (*sayHello)(char* name); };void sayHello(char* name){ printf("你好,%s\n",name);}int main(){ struct Hello* hello=(struct Hello *)malloc(si原创 2021-03-03 15:19:53 · 3345 阅读 · 1 评论 -
expression must have class type
expression must have class type提示28行:expression must have class type原因是,使用指针访问函数的时候应该 pointer->func(); 而我使用了 pointer.func()原创 2021-03-03 15:12:22 · 4287 阅读 · 2 评论 -
33. 搜索旋转排序数组 C++实现
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4示例 2:输入: nums = [4,5,6,7,0,1,2], t原创 2020-07-12 00:07:16 · 421 阅读 · 0 评论 -
236. 二叉树的最近公共祖先 C++实现
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5..原创 2020-07-11 23:43:50 · 337 阅读 · 0 评论 -
110. 平衡二叉树 C++实现
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3...原创 2020-07-11 23:00:26 · 175 阅读 · 0 评论 -
108. 将有序数组转换为二叉搜索树
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / /-10 5来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems...原创 2020-07-11 22:47:00 · 131 阅读 · 0 评论 -
88合并两个数组 C++实现
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3输出: [1,2,2,3,5,6...原创 2020-07-11 18:27:29 · 783 阅读 · 0 评论 -
199. 二叉树的右视图 C++实现
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入:[1,2,3,null,5,null,4]输出:[1, 3, 4]解释: 1 <--- / \2 3 <--- \ \ 5 4 <---/** * Definition for a binary tree node. * struct TreeNode { * ..原创 2020-07-11 17:58:41 · 479 阅读 · 0 评论 -
124. 二叉树中的最大路径和 c++实现
参考链接:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/solution/er-cha-shu-de-zui-da-lu-jing-he-zhu-yao-li-jie-ti-/给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3...原创 2020-07-11 17:28:15 · 1447 阅读 · 0 评论 -
155. 最小栈 C++实现
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) —— 将元素 x 推入栈中。 pop() —— 删除栈顶的元素。 top() —— 获取栈顶元素。 getMin() —— 检索栈中的最小元素。示例:输入:["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[],[]]输出:[...原创 2020-07-11 15:53:07 · 198 阅读 · 0 评论 -
121. 买卖股票的最佳时机 C++实现
给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。..原创 2020-07-11 15:36:54 · 376 阅读 · 0 评论 -
leetcode 25. K 个一组翻转链表 C++实现
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->4->5说明: 你的算法只能使用常数的额外空间。 ...原创 2020-07-11 14:46:52 · 229 阅读 · 0 评论 -
剑指offer:不是用乘除和判断条件进行求和 C++
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。//使用静态变量//注意静态变量属于类,只能通过类进行访问,同时需要再类外进行定义,静态变量只能通过静态成员函数操作class Solution {public: static int N; static int sum; static void Set(){ N = 0; sum = 0;原创 2020-06-30 23:20:46 · 123 阅读 · 0 评论 -
剑指offer: 构建乘积数组 c++实现
给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2];)class Solution {public: // B就像是对角线上为1,其他数据为Ai的矩阵的横向乘积 // 可以看作是两.原创 2020-06-30 23:01:47 · 193 阅读 · 1 评论 -
剑指offer:正则表达式C++实现
请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配class Solution {public: // 可以使用递归进行实现 // 1.判断第一个字符相等 1.说明都是字符, 2. 模式串是. // 2.*只能出现在第1位之后,.原创 2020-06-30 22:08:09 · 145 阅读 · 1 评论 -
剑指offer:把字符串转换成整数 C++实现
题目描述将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达则返回该数字,否则返回0示例1输入+21474836471a33输出21474836470总体很简单,主要是第一个字符是否为正负号,中间是否出现过非数字的字符,对于负数的输出class Solution {public: int St.原创 2020-06-28 23:45:39 · 151 阅读 · 0 评论 -
剑指offer:数组中重复的数字C++实现
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。/* lev(a, b ) = { max(a,b) a * b = 0; min( lev(a-1, b) lev(a, b-1) lev(a - 1, b - 1)原创 2020-06-28 23:22:55 · 280 阅读 · 0 评论 -
c++求编辑距离
题目描述给定两个字符串,已知可以使用三种方式进行变换1. 插入一个字符2. 删除一个字符3. 更改一个字符请设计一个算法,找到两个字符串之间的经历几次最小变换,可以字符串1转换成字符串2输入描述:输入两个字符串,字符串的长度<=1000输出描述:最小变换次数示例1输入hellohelle输出1写在前面,好久没有直接些main函数了,string也不怎么会用了,这道题目标注的是简单,但是因为之前没有了解过编辑距离,看到这个题目的时候是真的一脸懵原创 2020-06-28 22:53:37 · 1198 阅读 · 2 评论 -
剑指offer:链表中的环入口
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/// 首先判断是否包含环,如果包含环,则统计环中节点的个数// 1.使用两个指针,一个走两步,一个走一步,则一定能在环中相遇// 2.相遇后一个节点不动,另一个节点原创 2020-06-27 21:18:54 · 165 阅读 · 0 评论 -
剑指offer:求二叉树当前节点的在中序遍历中的下一个节点
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。/*struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNode *right; struct TreeLinkNode *next; TreeLinkNode(int x) :val(x), left(NULL), right(.原创 2020-06-27 20:31:40 · 163 阅读 · 0 评论 -
剑指offer:判断一颗二叉数是否对称C++
请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*///判定一个二叉树是否是对成的,可以看成,一个二叉树.原创 2020-06-27 20:09:52 · 268 阅读 · 0 评论 -
剑指offer:之字形打印二叉数C++
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*///这里要求之字形打.原创 2020-06-27 19:52:32 · 118 阅读 · 0 评论 -
剑指offer:按照层的方式打印二叉数C++
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/// 1.按照层打印二叉树,需要使用队列,先进先出// 2.每层打印一行,需要判断当前行有多少个.原创 2020-06-27 19:14:53 · 165 阅读 · 0 评论 -
leetCode:C++求字符串的最长无重复字串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子...原创 2020-06-27 18:21:12 · 802 阅读 · 0 评论 -
[剑指offer] C++顺时针打印矩阵,注意矩阵的行和列不一定相等
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.class Solution {public: // 首先判断打印顺时针圈的终止条件 : // 当前行号 columns > startX * 2 rows > startY * 2 //原创 2020-05-21 22:00:52 · 210 阅读 · 0 评论 -
剑指offer:判断一个二叉树是否是一个平衡二叉树:平衡二叉树:左右子树深度差不超过1
题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树题目解析:已经写到注释里面了。class Solution { //平衡二叉树是指左右子树的深度差不能超过1 //这里我们只需要统计左右子树的深度就可以了public: //用于统计二叉树的深度 int getDep(TreeNo...原创 2020-04-30 17:51:58 · 715 阅读 · 0 评论 -
剑指offer:复制复杂链表 使用C++实现
题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)题目解析已经写到注释里面了,这里面写的时候一定要细心哟/*struct RandomListNode { int label; ...原创 2020-04-30 17:32:54 · 129 阅读 · 0 评论 -
剑指offer:打印二叉树中和为K的所有路径: 二叉树中和为某一值的路径
题目:输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。题目解析已经写到代码中啦!/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : v...原创 2020-04-30 15:50:26 · 577 阅读 · 0 评论 -
剑指offer:判断一个序列是不是二叉搜索数的后序遍历,二叉搜索数:左子树小于根节点,右子树大于根节点
题目:输入一个非空整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。//判断是否是搜索二叉树的遍历//搜索二叉树:左子树小于根节点,右边子树大于根节点//从数组后面开始遍历,找到右子树的边界,然后递归右子树//判断左子树序列中是否存在比根节点大的数,如果没有递归左子树,如果有返回falseclass ...原创 2020-04-30 15:10:10 · 1542 阅读 · 0 评论 -
剑指offer:从上到下打印二叉树,有称之为广度优先遍历
题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。题目解析我已经写入到注释里面了!/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*///从...原创 2020-04-30 15:07:47 · 119 阅读 · 0 评论 -
剑指offer:栈的压入、弹出序列 使用C++实现
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)题目解析已经写在代码中了!//首先按照数组2进行遍历//1.判断改字符是否是...原创 2020-04-30 12:59:09 · 195 阅读 · 0 评论 -
剑指offer :使用C++实现二叉树的镜像。
题目描述:操作给定的二叉树,将其变换为源二叉树的镜像。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/// 二叉树的镜像,看着像不想每次都把左右子...原创 2020-04-26 14:57:25 · 149 阅读 · 0 评论