- 博客(60)
- 收藏
- 关注
原创 C语言常见问题总结--《C专家编程》
c语言的优先级规则:A 声明从它的名字开始读取,然后按照优先级顺序依次读取B 优先级从高到低依次是:B.1 声明中被括号括起来的那部分B.2 后缀操作符:括号()表示这是一个函数,方括号[] 表示这是一个数组B.3 前缀操作符:星号*表示“指向…的指针”C 如果const和/或volatile关键字的后面紧跟类型说明符(如int、long等),那么它作用于类型说明符。在其它情况下,const和/或volatile关键字作用于他左边紧邻的指针星号。例子1char * const *(*ne
2021-09-25 17:20:21 386
原创 EXCEL基本操作技巧
1、工作簿和工作表的区别2、快速选取区域或单元格①先选中需要的起始单元格;② ctrl + →/↓/←ctrl+shift + →/↓/← : 解决ctrl + A无法选中有空格的多个单元块shift + 选中需要选取的最后一单元格③注:excel用"a:b"表示"a到b"3、表格中行与列的设置①智能调整列宽:选中列-》出现黑色十字-》双击②增加列:ctrl+shift+"+" :默认创建左侧; shirt+移动整列③删除列:ctrl+ “-”④复制数据:ctrl+shift -》
2021-09-11 19:14:07 2043
原创 剑指offer68-树的最低公共节点 C++
剑指 Offer 68 - I. 二叉搜索树的最近公共祖先给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树:测试用例① root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8测试用例② root = [6,2,8,0,4,7,9,
2020-09-20 20:26:13 184
原创 《REAL-TIME INDOOR SCENE RECONSTRUCTION WITH RGBD AND INERTIA INPUT 》 原文翻译与解读
1 摘要:相机运动估计是三维重建和SLAM的关键技术。为了使其可行,之前的工作通常使相机慢速运动,这限制了它在许多实际情况下的使用。文章提出了一种结合color、RGB-D和IMU的端到端三维重建系统,以实现快速传感器运动的鲁棒重建。系统使用EKF融合这三种数据,并采用迭代法联合优化匹配特征、相机姿态和几何场景。本文还提出了一种基于几何感知的patch变形算法来适应图像域内的外观特征,从而在快速的摄像机运动下实现更精确的特征匹配。实验表明,我们的patch变形算法提高了特征跟踪的精度,并且我们的三维重建方
2020-09-18 22:11:40 706
原创 剑指offer 38-字符串的排列 C++
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。思路:采用递归+set去重(1)将第一个字符与后面所有字符交换;(2)固定第一个字符,求后面所有字符的排列class Solution {public: vector<string> Permutation(st
2020-09-13 17:27:08 210
原创 c++ lambda表达式与匿名函数
一、lambda表达式1、c++11新特性2、lambda表达式就匿名函数(没有名字的函数) //[]捕获列表 ()参数列表 ->返回值 int c= [](int a, int b) -> int { //函数体 return a + b; }(1,2); //传参3、函数式编程,在多线程、并发中使用广,可以避免多线程同步问题。因为lambda只依赖于内部,且可以内部嵌套,故所有函数都可转为lambda表达式 /*int c = [](int a, int
2020-09-08 21:56:58 579
原创 c++ 线程与同步编程实战
1、主线程 和 子线程 交替执行#include <iostream>#include<Windows.h>//子子线程入口函数DWORD WINAPI Work2(LPVOID lParam2) { int subsubThread = 0; while (subsubThread < 10000) { printf("subsubThread~~~~~~=%d\n", subsubThread); subsubThread++; } retur
2020-09-08 16:19:24 427
原创 c++ win socket网络通信实例
一个很简单的socket通信实例:服务器端:#include <iostream>#include<stdio.h>#include<WinSock2.h>#include<cstring>#pragma comment(lib, "ws2_32.lib")using namespace std;/********************全局常量*********************/const int BUF_SIZE = 2048;
2020-09-08 13:03:12 637
原创 字节 魔术棒 C++ 核心代码
题目简要描述:输入一个二维结构体,以及给定一个点击的位置,编写代码返回所选区域的边缘,包括本身。#include <iostream>#include <vector>using namespace std;enum{LEFT = 1, RIGHT = (1 << 1), TOP = (1 << 2), BOTTOM = (1 << 3), LEFT_TOP = (LEFT|TOP), RIGHT_TOP=(RIGHT|TOP), LE
2020-07-18 21:52:02 530
原创 回溯之全排列Ⅰ、Ⅱ、子集Ⅰ、Ⅱ、组合 总结 C++/Python3
经典回溯算法模板:result = []def backtrack(路径, 选择列表): if 满足结束条件: result.add(路径) return for 选择 in 选择列表: 做选择 backtrack(路径, 选择列表) 撤销选择【通过flag标志位判断数组中某一元素是否已被包含】class Solution {public: vector<vector<int&g
2020-06-16 12:09:35 196
原创 乐鑫科技2021 提前批笔试题1 C++【如有侵权,请联系我!多谢】
编程题1:求一个n(1<n<=36)进制正整数除以m(1<m<=36)的余数。输入两行,第一行为n,m;第二行包含一个整数,由连续进制字符组成,若发现非法字符(比如空格;在10进制下,‘a’-'z’也属于非法字符),表示整数结束。#include <iostream>#include<vector>#include<string>using namespace std;class Solution {public://若先对字符
2020-06-10 13:52:40 1062
原创 剑指offer 14-剪绳子 C++
题目描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。思路1:数学归纳法,将number拆分成以3为主,2为辅的一系列和class Solution {public: int cutRope(int number) { if(num
2020-06-02 17:05:07 261
原创 剑指offer 19-正则表达式匹配 C++
题目描述请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配。思路1:递归,参考剑指offer书上解法。class Solution {public: bool match(char* str, char* pattern) { if (str == null
2020-06-02 16:12:20 229
原创 剑指offer 42-连续子数组的最大和 C++
题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)思路:对于求子串/子数组的最优解问题,优先考虑动态规划cl
2020-06-02 10:58:57 134
原创 leetcode 1219-黄金矿工 C++
你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为 m * n 的网格 grid 进行了标注。每个单元格中的整数就表示这一单元格中的黄金数量;如果该单元格是空的,那么就是 0。为了使收益最大化,矿工需要按以下规则来开采黄金:每当矿工进入一个单元,就会收集该单元格中的所有黄金。矿工每次可以从当前位置向上下左右四个方向走。每个单元格只能被开采(进入)一次。不得开采(进入)黄金数目为 0 的单元格。、矿工可以从网格中 任意一个 有黄金的单元格出发或者是停止。思路:带有记忆的
2020-05-29 11:17:09 712
原创 剑指offer 13-机器人的运动范围 C++
题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?思路:回溯法1)从(0,0)开始走,每成功走一步标记当前位置为true,然后从当前位置往四个方向探索,返回1 + 4 个方向的探索值之和2)探索时,判断
2020-05-28 17:04:26 223
原创 剑指offer 12-矩阵中的路径 C++
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。例如:a b c es f c sa d e e矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。思路:1)根据给定数组,初始化一个标志位数组,初始化
2020-05-28 16:12:54 228
原创 剑指offer 50-第一个只出现一次的字符&字符流中第一个只出现一次的字符 C++
题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)思路1:蛮力法,时间复杂度O(n^2)class Solution {public: int FirstNotRepeatingChar(string str) { if (str.length() == 0) return -1; for (int i = 0; i < str.s
2020-05-27 17:09:46 155
原创 剑指offer 59-滑动窗口的最大值&队列的最大值 C++
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,
2020-05-26 20:47:46 210
原创 剑指offer 58-翻转单词顺序 C++
题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?思路1:借用辅助栈,遇到空格就截取字符串,压入栈中,再依次从栈顶弹栈组成新的字符串。以空间换时间class Solution {pu
2020-05-26 16:00:23 305
原创 剑指offer 31-栈的压入、弹出序列 C++
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路:借助辅助栈,把输入的第一个序列中的数字一次压入栈,并按照第二个序列的顺序依次从该栈中弹出数字。1)若下一个弹出的数字刚好是栈顶元素,则直接弹出;2)若下一个弹出的数字 不在栈顶,则把压栈序
2020-05-25 18:42:51 273
原创 剑指offer 30-包含min函数的栈 C++
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。【注意两种实现的区别:】思路1:用两个栈实现,一个栈s1用来存储原值,一个辅助栈s2用来存储当前栈中的min。基本实现:1)若s2为空,则value入栈;2)若s1.top()<value,则将s1.top()压入s2栈中;3)每次弹栈时,s1和s2都要弹栈。class Solution {
2020-05-25 16:18:39 152
原创 剑指offer 9-用两个栈实现队列&用两个队列实现栈 C++
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路:栈——先进后出;队列——先进先出1、若s2不为空,则返回顶部元素;2、若s2为空,s1不为空,则将s1元素出栈到s2中,返回s2顶部元素;2、若s2为空,s1也为空,则返回-1.class Solution{public: void push(int node) { stack1.push(node); } int pop() { if(stack2.empty
2020-05-25 15:44:40 135
原创 剑指offer 40-最小的k个数 C++
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路1:快速排序 O(nlogn)。 先sort排序,然后再取最小的k个class Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { if (input.size() == 0 || k <= 0 ||
2020-05-23 21:50:28 194
原创 剑指offer 37-序列化二叉树 C++
题目描述请实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。例如,我们可以把一个只有根节点为1的二叉树序列化为"1,",然后通过自己
2020-05-22 14:43:48 245
原创 剑指offer 54-二叉搜索树的第k个节点 C++
题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。思路1:对于二叉搜索树,它的中序遍历数值是递增排序的。先进行递归中序,存入数组,然后从数组中取出第k大的数。尤其注意边界条件,即k与二叉树节点数的大小!若k>总节点数,就返回nullpter。class Solution {public: TreeNode* KthNode(TreeNode* pRoot, int k) { if (
2020-05-21 22:18:48 204
原创 剑指offer 32-3-按之字形顺序打印二叉树 C++
题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。思路1:之字形打印,层次遍历,用两个栈。s1为偶数行 s1输入元素应先右后左;s2为奇数行 s2输入元素应先左后右class Solution {public: vector<vector<int> > Print(TreeNode* pRoot) { vector<vector<int>>
2020-05-21 15:27:24 162
原创 剑指offer 32-2-把二叉树打印成多行 C++
题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。思路1:非递归,层次遍历BFS,使用一个队列,每一层使用一个数组存储数据,分行打印class Solution {public: vector<vector<int> > Print(TreeNode* pRoot) { vector<vector<int>> res; vector<int> arr; if (pRoot == nullptr) r
2020-05-20 21:55:46 154
原创 剑指offer 28-对称的二叉树 C++
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路1:利用剑指offer第27题二叉树的镜像。先得到二叉树的镜像,再判断是否相同class Solution {public: bool isSymmetrical(TreeNode* pRoot) { if (pRoot == nullptr) return true; TreeNode* cloneRoot = clone(pRoot); Mi
2020-05-20 20:31:43 144
原创 剑指offer 8-二叉树的下一个节点 C++
题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路: 中序遍历——左中右1、存在右子树,找到右子树的最左子节点,即为下一个节点;2、不存在右子树:1)为左子节点,则下一节点是父节点;2)为右子节点,则沿着它的父节点向上遍历,直到找到第一个父节点的左子节点为该节点的位置,就是下一个节点;3)为右子节点,且找不到满足 2)的父节点,则该节点为尾节点。class Solution {public:
2020-05-20 14:30:40 177
原创 剑指offer 55-2-平衡二叉树 C++
题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树。知识点:平衡二叉树的左右子树深度最多相差1;前面几层满秩。 参考书中解法!思路1:遍历树的每个节点时,调用TreeNodeDepth函数得到它的左、右子树的深度。缺点:至上而下,判断上层节点时,会重复遍历下层节点class Solution {public: bool IsBalanced_Solution(TreeNode* pRoot) { if (pRoot =
2020-05-19 20:42:36 177
原创 剑指offer 55-二叉树的深度 C++
题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。求树的深度,可以从层次遍历和深度遍历角度考虑!思路1:递归,注意边界条件class Solution {public: int TreeDepth(TreeNode* pRoot) { int count = 0; int max = 0; dfs(pRoot, max, count); return max; } void dfs(TreeNod
2020-05-19 16:55:16 422
原创 剑指offer 34-二叉树中和为某一值的路径 C++
题目描述输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。思路1:带有记忆的dfs,典型解法1、先序遍历树,把节点加入路径2、若该节点是叶子节点则比较当前路径和是否等于给定值3、弹出节点,每一轮递归返回到父节点时,当前路径也应该回退一个节点class Solution {public: vector<vector<int> > FindPath(TreeNode* roo
2020-05-19 15:20:38 175
原创 剑指offer 33-二叉搜索树的后序遍历序列 C++
题目描述输入一个非空整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路1:后序遍历,数组最后一个元素必为根节点。1、先找到根节点root,位于数组末尾;2、从左到右遍历数组,得到第一个比root大的元素位置i,将数组分为两部分,i左边为左子树,i开始往右为右子树;3、判断右子树是否满足>root4、递归1,2,3class Solution{public: bool VerifySquenceOfB
2020-05-18 16:46:56 264
原创 剑指offer 32-从上到下打印二叉树 C++
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路:非递归,层次遍历,即广度优先算法(bfs),使用队列1、将根节点入队;2、若队列非空,取队首元素,push到vector中;3、将下一层节点加入到队尾4、重复2、3,直到队列为空/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), righ
2020-05-18 14:32:22 114
原创 剑指offer 36-二叉搜索树与双向链表 C++
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路1:递归——按照中序遍历 左根右,先找到左子树的最左头节点;将根节点连接到左子树最右边节点;再找到右子树的最左节点,链接到根节点右边。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), r
2020-05-17 20:52:39 146
原创 剑指offer 27-二叉树的镜像 C++
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。思路1:非递归,使用队列进行每一层的反转/*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) {
2020-05-17 17:25:44 139
原创 剑指offer 26-树的子结构 C++
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路:递归1、递归A树,找到与B的根节点相同的节点;2、找到根节点后,再判断A、B的左右子树是否相同;3、若相同,返回true;否则,返回false。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), righ
2020-05-17 16:21:36 153
原创 剑指offer 7-重建二叉树 C++
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:递归前序遍历:根-左-右中序遍历:左-根-右1、由前序遍历序列知道第一个为根节点;2、先找到根节点在中序的位置,将中序拆分为左和右子树;3、对于中序序列的左右子树,分别找到其对应的前序序列的左右子树;4、重复1、2、3/** * Defini
2020-05-17 15:12:36 158
原创 剑指offer 52-两个链表的第一个公共节点 C++
题目描述输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)思路1:分别求出两链表表长,计算差值dist,让长的先走dist,然后两链表同时走,找到第一个相同节点。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public:
2020-05-16 22:40:48 202
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人