![](https://img-blog.csdnimg.cn/8abb0147f6ab4b10b42f6819fc06744b.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
【其它|未分类】
文章平均质量分 71
一些杂项内容
快乐江湖
专注人工智能领域和优质计算机学习笔记创作
展开
-
(机器学习-深度学习快速入门)第二章数据分析基本工具练习
可以看出,不仅仅是"3"号特征,还有其他特征均出现了这样的问题。使用Pandas导入该数据集,然后使用 describe()到此为止,这样的数据就基本能满足进行下一步分析工作的要求了。如下,对特征"0"和"3"分别做直方图,间隔。设置为30,这样就有50组。0填充的工作应该放在绘制直方图工作之前,代码如下。就更容易发现问题,这些数值为0的数据大概率是。,例如在信号收集时没有正确收集到信号。因此为了验证我们的猜想,可以用。,其中各项表示的含义如下。当然如果你对"3"特征做。查看该数据集的总体情况。原创 2022-10-04 15:18:09 · 452 阅读 · 0 评论 -
(机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
梯度下降算法:假设有nnn组数据,自变量x(x1,x2,...,xn)x(x1,x2,...,xn),因变量y(y1,y2,...,yn)y(y1,y2,...,yn),并且它们满足f(x)=axf(x)=axf(x)=ax,记J(a)J(a)J(a)为f(x)f(x)f(x)和yyy之间的差异,也即J(a,)原创 2022-10-07 16:06:54 · 573 阅读 · 0 评论 -
(机器学习-深度学习快速入门)第三章机器学习-第一节:了解什么是机器学习
机器学习(ML):从广义上来说,机器学习是一种能够赋予机器学习的能力以此让它完成直接编程无法完成的功能的方法。但从实践的意义上来说,机器学习是一种通过利用数据,训练出模型,然后使用模型预测的一种方法。机器学习不是基于编程形成的结果,因此它的处理过程不是因果的逻辑,而是通过归纳思想得出的相关性结论机器学习的过程类似于人们利用历史经验做出预测判断的过程机器学习过程大致是这样的:首先我们需要在计算机中存储历史的数据,接着利用机器学习算法对这些数据进行处理,这个过程在机器学习中称之为训练。原创 2022-10-06 14:29:15 · 829 阅读 · 1 评论 -
数据结构-时间复杂度和空间复杂度
文章目录一:算法效率-时间和空间复杂度二:时间复杂度(1)时间复杂度的概念(2)大O的渐进表示法A:例子一:算法效率-时间和空间复杂度 完成某个功能可能有多种实现的算法,可是如何去评判算法的好坏呢。最为直观的就是判断某个算法时间复杂度,正如用速度描述物体运行的快慢一样,我们可以用时间复杂度来评判某个算法的快慢或好坏。而对于空间复杂度来说,在如今现代计算机的发展,我们已经无需过多考虑空间复杂度,首当其冲最为关心的还是算法是否够快,也就是时间复杂度。二:时间复原创 2020-12-03 14:58:07 · 518 阅读 · 1 评论 -
数据结构之二叉搜索树
文章目录一:二叉搜索树的概念二:二叉搜索树的实现(1)二叉搜索树的插入和查找(2)二叉搜索树的删除一:二叉搜索树的概念二叉搜索树又称为二叉排序树,它是这样一颗树若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值根节点的左右子树也是一课二叉搜索树二:二叉搜索树的实现关于二叉树搜索树的插入和查找都特别简单,这里就不解释了,重点的是二叉树搜索树的删除(1)二叉搜索树的插入和查找#pragma once#include &l原创 2021-05-20 16:26:29 · 457 阅读 · 2 评论 -
数据结构-AVL树
文章目录一:AVL树的概念二:AVL树实现(1)AVL树结点的定义(2)AVL树的插入一:AVL树的概念普通的二叉搜索树有一个致命的缺陷,就是如果将一个有序的序列插入到树中,树的高度将会不断增大,也就是说树的高度会很高,而我们知道二叉搜索树树的高度将直接决定搜索效率。极端情况下将退化为单支树因此如果能保证每个结点的左右子树的高度之差的绝对值不超过1,就能降低树的高度,从而提高搜索效率,我们把这种结构称之为高度平衡搜索树,简称为AVL树下面的这棵树就是一棵AVL树,每个结点的平衡因子(平衡因子就是原创 2021-06-19 17:53:30 · 969 阅读 · 0 评论 -
数据结构-线性表之栈和队列
文章目录一:栈(1)栈的概念(2)压栈与出栈(3)栈的C语言实现1:栈的结构定义2:栈的初始化3:增容4:进栈5:出栈6:清空栈7:取栈顶元素(4)总结(5)实现代码一:栈(1)栈的概念栈:栈是一种特殊的线性表,元素只能在一端插入和删除。进行插入和删除的一端称作栈顶,另一端称为栈底。栈中的元素遵循先进后出的原则。(2)压栈与出栈压栈:栈的插入操作称为压栈,栈顶入数据出栈:栈的删除操作称为出栈,栈顶也出数据如下:栈顶固定,栈顶随元素插入和删除动态变化上面的栈使用数组实现的,栈也可以用链表保存原创 2021-01-26 16:49:44 · 1315 阅读 · 0 评论 -
数据结构-线性表之循环队列
文章目录一:循环队列一:循环队列实现队列要么使用数组,要么使用链表,但由于数组对于出队和入队这样的操作效率不高,所以实现队列一般使用链表。如果现在要求你使用顺序表(也就是顺序队)来实现队列,在不考虑操作的复杂性的情况下肯定是可以实现的,但是这会存在一个致命的问题——“假溢出”。如下,经过一系列入队出队操作,某一刻出现越界。一旦出现越界,这个队列就等于“报废”了而解决这个问题可以用到循环队列,循环队列从感觉上讲不是一个直链,而是一个圆环,在某一刻队满时,此时还要入队的话,队头指针便指向第一个元素,重原创 2021-02-01 22:02:28 · 510 阅读 · 1 评论 -
数据结构-线性表之顺序表
文章目录线性表(1)逻辑结构和物理结构(2)线性表(3)补充顺序表(数组)(1)概念(2)静态顺序表(3)动态顺序表线性表(1)逻辑结构和物理结构物理结构:数据元素在内存中真实的存放次序,有可能是连续存放的,也可能是散落于内存里。逻辑结构:为了便于描述数据元素之间的关系,我们想象出数据之间应该有某种的对应关系,如果是一对一就是线性结构,不是一对一那就是非线性结构。(2)线性表常见的线性结构就是线性表,所以说线性表在逻辑上是线性的,但是在物理上不一定是线性的。常见的线性表有顺序表,链表,栈,队列等原创 2020-12-04 21:50:55 · 441 阅读 · 1 评论 -
数据结构-线性表之带头结点的双向循环链表
文章目录前言实现(1)结构定义(2)基本函数(3)操作实现测试代码前言链表的类型有很多种(根据带头或不带头,循环或非循环等等),但是我们重点研究的只有两种,一种结构非常简单是无头单向非循环链表,有关它的操作见数据结构-线性表之单链表这种结果在开发中基本不会使用,因为因为结构简单往往意味着操作复杂,比如在求职中OJ题,有关链表的基本都用的是这种结构,关于这些OJ题感兴趣的见链表经典题另一种则是链表中结构最为复杂的——带头结点的双向循环链表这种结构看起来确实是很复杂的,但是它的操作很简单原创 2021-01-26 00:26:57 · 1093 阅读 · 0 评论 -
数据结构-线性表之单链表
文章目录一:相关概念(1)什么是链表(2)链表的优点和缺点(3)链表的分类二:实践(1)准备工作(2)结构体定义(3)说明一:相关概念(1)什么是链表官方定义:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的用一张图表示如下:当然这种表示总感觉和顺序表没有区别,所以我觉得这样表示可能更为形象:结点散落的分布在内存区域中,每个结点地址保存在前一个结点的指针域中,同时该结点的指针域又指向下一个结点的位置这里第一个结点比较特殊,所以我们用一个指针原创 2020-12-11 23:05:49 · 684 阅读 · 1 评论 -
数据结构-树与二叉树
文章目录一:树(1)树的概念(2)树的一些基本术语(3)树的表示A:孩子兄弟表示法B:双亲表示法C:孩子表示法二:二叉树(1)二叉树的概念(2)特殊的二叉树(3)二叉树的性质一:树(1)树的概念树是一种非线性的数据结构,是有n个(n⩾\geqslant⩾ 0,当n为0时叫做空树)有限结点组成的一个具有层次关系的集合。把它称为树,是因为它和现实中的数十分相像,只不过是倒挂的树如下,树中有一个非常特殊的结点,称其为根节点,根节点没有前驱,除根结点外,剩余每个结点又可以看作是以它为根节点所组成的子树,因原创 2021-02-05 23:45:26 · 1450 阅读 · 4 评论 -
数据结构-线性表之用队列实现栈&&用栈实现队列
文章目录一:思路二:实现(1)结构体定义(2)初始化和销毁(3)进“栈”(4)出“栈”三:代码一:思路二:实现(1)结构体定义(2)初始化和销毁注意:在测试文件外新建一个Mystack结构体时,不能只有一句Mystack ms,因为使用队列实现栈,那么该栈的底层是队列,所以必须同时要创建队列结构体,然后进行赋值才可以(3)进“栈”注意:进栈和出栈本质是在操作队列,所以这里仅仅使用的队列操作的接口,如果想要了解队列的出队和入队操作,请看:数据结构-线性表之栈和队列(4)出“栈原创 2021-01-27 16:31:46 · 1452 阅读 · 4 评论 -
扫雷
文章目录一:游戏介绍二:C语言实现扫雷(1)新建文件(2)逻辑流程一:游戏介绍《扫雷》是一款大众类的益智小游戏,于1992年发行。游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输二:C语言实现扫雷(1)新建文件整个游戏需要三个文件,第一个是头文件“Saolei.h”用于声明函数,宏定义等,第二个是“Saolei_game.c”用于实现头文件中所声明函数的功能,第三个是"Saolei_test.c"用于控制整个游戏逻辑。(2)逻辑流程第一:打原创 2021-01-15 19:32:50 · 472 阅读 · 1 评论 -
三子棋
文章目录一:三子棋游戏介绍二:C语言实现三子棋(1)新建文件(2)逻辑流程一:三子棋游戏介绍三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙、井字棋等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。但是,有很多时候会出现和棋的情况。二:C语言实现三子棋这里不采用拿出完整代码的方式,讲解每一部分代码是什么作用,我们从0开始,一步一步实现整个逻辑(1)新建文件整个过程需要三个文件,第一个是头文件“chess.h”用于声明函数,宏定义等,第二原创 2021-01-13 16:02:11 · 1619 阅读 · 1 评论 -
相同的树:给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
前言:二叉树刷题是有固定思维的,请移步README】二叉树刷题框架相同的树题目点击跳转:LeetCode如果p结点和q结点同时存在且值相同那么就可以去递归判断下一个,知道同时遇到结束条件:pNULL&&qNULL为止,反之就是falseclass Solution {public: bool isSameTree(TreeNode* p, TreeNode* q) { if((p&&q)&&p->原创 2021-05-09 12:44:27 · 710 阅读 · 0 评论 -
二叉树经典题之根据二叉树创建字符串(二叉树的括号表示法)
前言:二叉树刷题是有固定思维的,请移步README】二叉树刷题框架根据二叉树创建字符串题目点击跳转:LeetCode递归解法这道题其实考察到的是二叉树的括号表示法,括号表示法依靠括号的划分来区分左子树和右子树。整体思路不难,也即使递归创建:首先字符串中加入结点的值,然后遍历左子树和右子树,在遍历每棵子树的时候首先创建(,然后递归,接着递归完成之后再创建),对于空结点则表示为()也就是如果不要去管题目的其它限制,可以写出这种情况下递归代码class Solution {publi原创 2021-05-21 13:59:28 · 2809 阅读 · 0 评论 -
二叉树经典题之将二叉树分层打印
前言:二叉树刷题是有固定思维的,请移步README】二叉树刷题框架文章目录前言:二叉树的层序遍历思路一:两个队列分析:代码二叉树的层序遍历题目点击跳转:LeetCode思路一:两个队列分析:如果直接让你层序遍历,那么就很简单,直接使用队列即可,但是现在它不止要求你层序遍历打印,而且还要求你同一层的要放在相同的一维vector里(C++中的数组),最终返回一个二维数组思路一就是可以使用两个队列,queue_node队列用来保存二叉树的结点,queue_level用于标识某个结点属原创 2021-05-21 15:37:37 · 346 阅读 · 0 评论 -
翻转二叉树:
前言:二叉树刷题是有固定思维的,请移步README】二叉树刷题框架翻转二叉树题目点击跳转:LeetCode这道题比较简单,只要结点不是空结点,就把他的左节点和右节点进行交换,然后再进行递归class Solution {public: TreeNode* invertTree(TreeNode* root) { if(root!=NULL) { TreeNode* temp=root->left;原创 2021-05-09 12:33:35 · 98 阅读 · 0 评论 -
二叉树经典题之二叉树最近公共祖先(LeetCode)
前言:二叉树刷题是有固定思维的,请移步README】二叉树刷题框架文章目录前言:二叉树的最近公共祖先思路代码二叉树的最近公共祖先题目点击跳转:LeetCode思路从题目中的描述可以发现如下规律如果结点p和结点q在分别在root结点的左右子树,那么root结点便是p和q的最近公共祖先如果结点p和结点q都在root结点的左子树,那么就要到左子树中寻找;相反就要去右子树中寻找某次寻找时如果出现了root==q或root==p的情况,例如示例中的结点5和结点4,那么此时root结点原创 2021-05-22 15:23:17 · 260 阅读 · 0 评论 -
二叉树入门题
题目原创 2021-02-06 17:05:14 · 373 阅读 · 1 评论 -
二叉树经典题之从前序和中序遍历构建二叉树
前言:二叉树刷题是有固定思维的,请移步README】二叉树刷题框架从前序和中序遍历构建二叉树题目点击跳转:LeetCode思路这道题体现的就是分治的思想,我们知道前序遍历啊可以确定一个子树的根节点,而中序遍历可以根据根节点将一颗子树再次分为左右子树,所以只需分解完成依次,后面的过程就是递归过程如下,首先根据前序确定这棵树的根节点为A,然后根据中序遍历确定A的左右子树在中序中的范围下一步又分别确定了左右子树的根节点为B和C剩下的就是递归过程代码class Solutio原创 2021-05-25 13:16:48 · 1319 阅读 · 1 评论 -
单值二叉树:如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时,才返回 true;否则返回 false。
前言:二叉树刷题是有固定思维的,请移步README】二叉树刷题框架单值二叉树题目根据框架描述,我只需判断一个结点,如果这个节点是null就返回true,不是的话,如果左子树结点存在就判断左子树结点的值是否和本节点值相同,不相同返回false,右子树也是一样。剩下的交给递归,只有当左子树和右子树同时不返回false的时候此题才是一颗单值二叉树class Solution {public: bool isUnivalTree(TreeNode* root) {原创 2021-05-09 11:50:12 · 240 阅读 · 0 评论 -
二叉树经典题之二叉树的非递归遍历
文章目录前序遍历非递归思路代码其他写法前序遍历非递归思路让左节点不断入栈,入栈就代表访问(在题目中对应的就是将元素压入vector中),当走到最左侧时停止入栈,此时现在的任务就是处理右子树了。所以开始出栈,每出栈一个元素查看其是否存在右子树,如果没有右子树那么继续出栈,如果存在右子树,这表示来了一个新的子树,那么对于这颗子树只需作为子问题重复执行即可代码 */class Solution {public: vector<int> preorderTraversal(Tree原创 2021-06-06 12:06:01 · 178 阅读 · 0 评论 -
【README】二叉树刷题框架
原创声明本人在学习算法时也时长感觉困惑,但是有幸看到一本非常好的算法书籍,也算是解决了我很多疑惑,我发现有些东西不是我智商不够,而是缺乏训练,尤其是有目的,有逻辑的训练。本文皆是我在阅读它的书后所做的一些整理,发表一下自己的看法。如果有兴趣的小伙伴可以移步labuladong的算法小抄前言:二叉树在面试题中经常出现,因为它和“递归”总紧密相连,同时二叉树也是最好做的一类题,因为它的形式,框架很固定二叉树框架核心思想:你只需要明确一个节点需要做的事情,剩下的全部进行递归void Binar原创 2021-05-09 11:31:48 · 321 阅读 · 0 评论 -
二叉树最大深度:给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
前言:二叉树刷题是有固定思维的,请移步README】二叉树刷题框架二叉树最大深度题目点击跳转:LeetCode此题如果从上向下前序遍历进行判断复杂度过高,因为每次判断一个结点都会涉及到很多重复。所以可以按照后序遍历的方式,直接先递归到叶子结点处,然后不断向上返回即可,最终判断左子树大还是右子树大,大的就是整个树的最大深度。需要注意的是每次返回要+1,否则会忽略根节点class Solution {public: int maxDepth(TreeNode* root)原创 2021-05-09 12:16:26 · 747 阅读 · 0 评论 -
二叉树经典题之线索二叉树(中序)
前言:二叉树刷题是有固定思维的,请移步README】二叉树刷题框架线索二叉树题目点击跳转:牛客思路此题本质就是二叉树的线索化,所谓二叉树的线索化就是不借用栈通过指针的指向来完成二叉树的非递归遍历所以此题中要求的双向链表本质就是指针的链接,而且它要求的是排好序的双向链表,而我们知道二叉搜索树的中序遍历就是顺序的,所以可以进行中序线索化过程也非常简单,只需要创建一个前驱指针prev,再每次进行递归之前,把当前结点root的left指向prev,同时把prev(不空)的right指向原创 2021-05-25 11:31:49 · 1276 阅读 · 0 评论 -
数组经典题之杨辉三角变形
题目杨辉三角变形解决可以把题目给的图变形成一个容易理解的三角形可以看出每一个数都是上面的三个数的和。我们可以将原图补全为一个完整的矩形,每一行的元素个数的都是2×行标-1。因此我们可以搞出一个矩形,首先所有为止都填充为0,然后依次按照列赋值,其中每一行的第一列和最后一列的值为1,每一行的第二列和倒数第二列需要特殊处理,因为他们不够上一行的数不够三个,直接复制会越界。解决#include <iostream>#include <vector>using n原创 2021-05-16 16:31:57 · 316 阅读 · 0 评论 -
字符串经典题之参数解析
题目参数解析(点击跳转)这道题并不慢,主要是一些细节得注意。尤其是第三个参数和第四个参数可能会出现引号,所以在大的情况下得把遇到引号和不是引号的情况分开来讨论。我们建立一个临时变量temp,它用来依次分解每个参数,分解完成之后加入到返回结果里面。由于这道题,思路不难,主要是一些细节问题,所以具体操作过程用代码详细注释,这里就不多解释了#include <iostream>#include <string>#include <vector>using na原创 2021-05-13 22:21:55 · 329 阅读 · 0 评论 -
字符串经典题之大数相加
题目字符串相加解答相加时按照对应为相加即可,注意有的时候相加可能会导致进位,所以我们可以定义一个变量next,next取值为0表示不进位,next取值为1表示进位。拿出对应位的字符的时候,将他们加起来(也包括next),然后判断相加的结果是否大于10,如果大于10把next设置为1,否则设置为0,。每算完一个结果,就把结果push进一个string里。最后将结果反转。需要注意的时候,加完之后要判断一下这个进位是否归为0,因为有时会出现9999+1=10000这种情况,如果不判断话,结果就编程了原创 2021-05-16 17:05:20 · 356 阅读 · 0 评论 -
字符串经典题之正则匹配字符串
题目字符串通配符注意此题和LeetCode 10:正则表达式匹配这道题虽然看着一样,但是本质不一样。力扣上的这道题,对于*匹配的是它前面的0个或多个,是单个字符,而牛客的这道题*匹配任意字符串多次关于力扣的这道题,有兴趣的读者可以查看这篇博客,其难度要比本题高很多动态规划之正则表达式匹配字符串思路仔细分析,其实很简单。采用两个指针分别扫描模式串和字符串,如果两个指针指向的字符相同,那么就比较下一个,如果模式串遇到?,那么对于目标串可以是任意。如果模式串遇到*,那么这个*可以匹配目标原创 2021-05-18 13:20:27 · 246 阅读 · 0 评论 -
字符串经典题之扑克牌的大小
题目这种类型的题目不涉及算法,和我们日常的业务逻辑十分相似。最关键的一点就是思维清晰,逐步细化。比较的时候首先比较类型,如果两副牌的数目相同,那么肯定是相同类型的,在这种情况下再去比较点数,而比较点数的时候大小完全是依靠第一张牌的点数大小决定的;一旦两幅排数目不相同,表示类型出现了差异,这种情况下必须有一方是炸弹,不然就不满足题意的输入了#include <iostream>#include <string>#include <algorithm>usi原创 2021-05-15 20:12:17 · 188 阅读 · 0 评论 -
基础编程题之洗牌
文章目录题目解题思路代码题目牛客解题思路题目看似复杂,但是十分简单。关键就在于搞清左手牌和右手牌如何摆放的问题根据题目的意思,使用数组保存牌,第一次洗牌完成后结果如下可以对比洗牌前后,左手牌和右手牌的位置关系为原数组中位置为i的左手牌放到了新位置为2*i处,比如说原数组中左手牌3,其下标为2,放到了2*2的位置,即4原数组中位置为i+n的右手牌放到了新位置1位2*i+1处,比如说原数组中的右手牌5,其下标为4,也就是1+3,放到了2*1+1,即下标为3的位置根据以上叙述,即可写原创 2021-06-16 14:31:15 · 272 阅读 · 0 评论 -
基础编程题之因数分解
文章目录题目1解题思路代码题目2解题思路代码题目1牛客解题思路首先对于求素数,因数分解这类的题目,搜索范围一般是[2,sqrt(a)]因为数学中:假设a合数,并且a == b * c,其中b、c中必定有一个 ≤ sqrt(a),不可能出现b、c同时大于a对于这一题,还有一点要注意的是,当我们把a的所有2因数都分解出来后,2的倍数(4、6、8…)都不可能再分解出来,比如100分解出2 x 2后,无法再分出2的倍数,同样分解出所有3因数后,则无法再分出3的倍数…因此我们可以:在[2, sqrt原创 2021-06-27 19:57:48 · 391 阅读 · 2 评论 -
基础编程题之查找组成一个偶数最接近的两个素数
题目此题比较简单,首先以20为例,如果要使得两个数和为20,那么一定一个数小等于10,另一个数大于等于10,所以让两个指针从中间各自向左向右探查,如果同时是素数就返回#include <iostream>#include <cmath>using namespace std;bool is_prime(int num){ for(int i=2;i<=sqrt(num);i++) { if(num%i==0)原创 2021-05-12 12:34:32 · 225 阅读 · 3 评论 -
基础编程题之最大连续bit数(位运算)
题目这道题涉及到的也是位运算,具体思路就是,定义一个count,定义一个max,从右向左依次扫描这个数的二进制位,遇到1就count++,遇到0就将count置为0,并且将max和count进行比较,并把大的赋值给max同时还有一个问题,就是如何判断一个二进制数字的某一位是0还是1,我们只需要将某个数移位然后让它和1进行与运算,如果结果为1表明此位为1,否则此位为0using namespace std;int main(){ int num=0; while(cin&g原创 2021-05-12 13:35:48 · 201 阅读 · 1 评论 -
基础编程题之二进制插入(位运算)
题目题目的意思是给出n和m的二级制,要求把m的二进制数字插入到n的二进制的第j位到第i位(从右向左),它保证n的第j位和第i位均为0这道题我在开始做的时候,没有注意到它保证了n的第j位和第i位均为0这样的条件,所以做法较为麻烦,具体就是Z转为二进制后再依次追加class BinInsert {public: int binInsert(int n, int m, int j, int i) { string n_string; while (j> 0)//把第0位到第j位的先转原创 2021-05-12 12:09:18 · 234 阅读 · 0 评论 -
基础编程题之不用加减乘除做加法
文章目录题目解题思路代码题目牛客解题思路这种题其实有非常多的解法,这里我们一定要掌握一种效率最高的算法,那就是利用位运算,其本质也就是二进制的加法在十进制中,我们做加法一般遵循以下三步:以5+7为例首先从个位开始相加,不要算进位,得到2接着计算进位的值,为10如果进位的值为0,那么直接结束,可以结束计算或者进行下一位;像第二步那种情况,进位为1,所以给十位进位。而在二进制中,其实也是遵循三个步骤:以5+7为例,其二进制分别为101和111首先把每一位进行相加,得到010,而这原创 2021-06-25 15:31:42 · 145 阅读 · 0 评论 -
基础编程题之最近公共祖先
题目此题也很简单,只需让两个节点的值相互比较,大的变为它的根节点,然后再比较,继续循环下去,知道两个节点值相等时,就是最近的公共祖先class LCA {public: int getLCA(int a, int b) { while(a!=b) { if(a>b) { a/=2; } else原创 2021-05-12 12:55:15 · 143 阅读 · 0 评论 -
基础编程题之牛客网星际密码
文章目录题目解题思路代码题目牛客解题思路本题的基本意思就是给你给定一个矩阵:(1110)\begin{pmatrix}1 & 1 \\1 & 0\end{pmatrix}(1110),然后一个数n,n表示矩阵(1110)\begin{pmatrix}1 & 1 \\1 & 0\end{pmatrix}(1110)的n次方,这个n代表一个数也就是解密的结果,即为(1110)\begin{pmatrix}1 & 1 \\1 &原创 2021-06-25 14:53:17 · 238 阅读 · 1 评论