自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 剑指offer—day 14(回溯-1)

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。例如,在下面的 3×4 的矩阵中包含单词 “ABCCED”(单词中的字母已标出)。对于每一个点,定义visit数组看是否已经走过每次向四个方向探索,只要有满足的即返回1,只要不满足即返回0,所以是 或式(dfs

2022-06-27 20:04:13 216 1

原创 剑指offer—day 13(双指针-3)

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。\qquad输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。hash表:双指针:\qquad输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。示例 1:略显sb的题目….

2022-06-27 19:52:53 186

原创 剑指offer—day 12(双指针-2)

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。创建新表:递归:\qquad输入两个链表,找出它们的第一个公共节点。hash集合:先把A的结点全部加入unordered_set里面,然后逐一判断B的结点并加入即可…O(n)浪漫解法:m,n分别做模m的减法和模n的减法,指定一个数(相遇位置),m和n每次减一,多次以后,m与n会均为这个数,即相遇了?...

2022-06-23 22:00:52 301

原创 剑指offer—day 11(双指针-1)

给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。递归:\qquad输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。十分简单...

2022-06-23 21:44:24 200

原创 哈希集合(unordered_set)

哈希集合为一个无序集合,类似于哈希表(unordered_map),不过hash表用来查找元素的,而哈希集合主要是存储元素,判断是否在里面。需要注意的是:

2022-06-02 19:29:56 1874

原创 剑指offer—day 10(中级dp—2)

day 101.剑指 Offer 46. 把数字翻译成字符串【中等】2.剑指 Offer 48. 最长不含重复字符的子字符串【中等】1.剑指 Offer 46. 把数字翻译成字符串【中等】给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。示例 1:输入: 12258输出: 5解释: 12258有5种不同的翻译,分别是

2022-06-01 13:58:00 120

原创 剑指offer—day 9(中级dp—1)

day 91.剑指 Offer 42. 连续子数组的最大和【简单】2.剑指 Offer 47. 礼物的最大价值【中等】1.剑指 Offer 42. 连续子数组的最大和【简单】输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1: 输入: nums = [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1]的和最大,为 6。int maxSubArray(vector<int&

2022-05-31 17:30:16 62

原创 剑指offer—day 8(初级dp)

day 81.剑指 Offer 10- I. 斐波那契数列【简单】矩阵乘法2.剑指 Offer 10- II. 青蛙跳台阶问题【简单】3.剑指 Offer 63. 股票的最大利润【中等】1.剑指 Offer 10- I. 斐波那契数列【简单】写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和

2022-05-31 17:10:46 95

原创 剑指offer—day 7(递归:二叉树镜像)

day 71.剑指 Offer 26. 树的子结构【中等】思路:2.剑指 Offer 27. 二叉树的镜像【简单】思路3.剑指 Offer 28. 对称的二叉树【简单】思路1.剑指 Offer 26. 树的子结构【中等】输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A: 3 / \ 4 5 / \ 1 2给定的树 B: 4 / 1返回

2022-05-30 22:51:10 106

原创 剑指offer—day 6(二叉树—层序)

day 061.剑指 Offer 32 - I. 从上到下打印二叉树【中等】1.剑指 Offer 32 - I. 从上到下打印二叉树【中等】从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树: [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回:[3,9,20,15,7]class Solution {public: vector<int> levelOrder(TreeNode* root

2022-05-30 22:38:49 100

原创 剑指offer—day 5(查找:二维数组、hash表)

day 51.剑指 Offer 04. 二维数组中的查找【中等】2.剑指 Offer 11. 旋转数组的最小数字【简单】3.剑指 Offer 50. 第一个只出现一次的字符【简单】1.剑指 Offer 04. 二维数组中的查找【中等】在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15

2022-05-14 17:02:42 181

原创 剑指offer—day 4(二分法)

day 41.剑指 Offer 03. 数组中重复的数字【简单】2.剑指 Offer 53 - I. 在排序数组中查找数字 I【简单】3.剑指 Offer 53 - II. 0~n-1中缺失的数字【简单】1.剑指 Offer 03. 数组中重复的数字【简单】在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。思路:只需要找到任意的一个重复数字即可,直接遍历O(n)//

2022-05-14 16:45:30 137

原创 迭代器(iterator)简介

含义\qquad迭代器的作用是用来访问容器中的元素,可以理解为广义上的指针。类比于指针,我们使用指针访问数组,那么对于数组来说指针就是一种迭代器。\qquad但是在C++中有许多复杂的容器,例如vector、string、list、map等,对于这些不同的容器,我们都会使用为其量身打造的迭代器。对比于指针,不同容器的迭代器的功能更多。\qquad迭代器的使用\qquad对于所有的迭代器,他们的使用方法和指针一样//例如vector<typename> a;vector<ty

2022-05-13 20:38:41 869

原创 vector容器的使用

vector(向量)为封装了动态大小的顺序容器,可以理解为变长数组,长度可以任意变化,甚至定义时令其长度为0与数组类似,可以直接访问(下标)1.初始化#include <vector>vector<typename> name; //typename可为简单或复合类型vector<Node*> n;vector<int> a; //长度为0的vectorvector<int> a(100); //长度100,值默认均为0(i

2022-05-12 23:25:38 353

原创 剑指offer—day 3(字符串)

day 31.剑指 Offer 05. 替换空格【简单】2.剑指 Offer 58 - II. 左旋转字符串【简单】1.剑指 Offer 05. 替换空格【简单】请实现一个函数,把字符串 s 中的每个空格替换成"%20"。string replaceSpace(string s) { int i=0; while(s[i]!='\0'){ if(s[i]==' '){ s[i]='%'; s.insert(i+1,"20"

2022-05-12 22:07:36 209

原创 剑指offer—day 2(链表)

day 21.剑指 Offer 06. 从尾到头打印链表【简单】思路:2.剑指 Offer 24. 反转链表【简单】思路:3.剑指 Offer 35. 复杂链表的复制 【中等】思路一 (哈希表+回溯)思路二 (迭代 + 节点拆分)相关知识vector的用法类的用法hash表的用法1.剑指 Offer 06. 从尾到头打印链表【简单】输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。思路:最简单的就是放数组里面逆置,因为返回vector,所以直接数组就可以。头插法、甚至用栈也可以

2022-05-12 19:54:51 255

原创 hash表的简单使用 (unordered_map)

hash表表项是 (键-值) 对(key-value)hash表的健和值可以是任何类型,可以是int、结构体、对象、对象的指针…一.初始化#include <unordered_map> //map为#include <map>unordered_map<Node*, Node*> tablenode; //Node*类型unordered_map<int, string> table={{5,"a"},{6,"b"}}; //直接初始化

2022-05-12 19:46:01 369

原创 剑指offer—day 1(栈)

剑指offer—day 11.剑指 Offer 09. 用两个栈实现队列【简单】用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )用两个栈A,B;因为将A中的东西全部入栈到B中时,B中即为队列的顺序,只需要出栈B即可。并且在B为清空前,后续的值可以继续存入A,因为队列是FIFO,等到B清空了,再把A全部入栈st1中即可。cla

2022-05-07 18:56:54 74

原创 中国传统颜色16进制颜色码

\qquad很明显,自然界中的颜色几乎有无数种,但是在计算机中我们需要用固定的内存去存储,根据三原色理论,我们就有了颜色在计算机中的各种数值命名表示,如RGB值,16进制颜色码,常见颜色可以用对应名称如red,green…RGB值\qquad计算机中颜色一般用RGB值表示颜色,RGB也就是光学三原色Red,Green,Blue(红绿蓝),因为三原色可以混合成所有颜色,所以计算机只需要存储这三种基色的数值即可。对于RGB三种基色,计算机用1字节(Byte)来存储相应强度值,总共3Byte。RGB值即三原色

2021-09-21 22:43:28 1919 1

原创 栈、堆(new/malloc)、静态区(static)的大小

一个由C/C++编译的程序占用的内存分为以下几个部分 :栈区stack:先进后出(FILO),编译器自动分配释放,存放函数的局部变量、函数参数、返回值、返回地址等。堆区heap:需要手动 malloc/new 动态分配 , free/delete 释放。全局区(静态区)static:全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另 一块区域。程序结束后由系统释放。文字常量区:常量字符串就 是放在这里的。 程序结束

2021-09-21 22:33:23 4311

原创 栈区和堆区

系统中的栈与堆一.栈(stack)二.堆(heap)堆与栈的区别之前像要用大量数据来测试各种排序算法的效率,但是在main函数内最多只能开辟几万个数的int型数组…借此我去学习了下栈和堆的知识note:以下均是操作系统里的栈和堆,不是数据结构里面的栈和堆☯。0xffffffff命令行参数及环境变量栈堆未初始化数据->(未初始化的静态变量)初始化数据->(初始化的静态变量)代码断0x00000000一.栈(stack)1.栈用于函数调用时的内存分配,执行期间编译器自动分配

2021-09-21 21:23:44 368

原创 程序内存布局

程序的内存布局大体划分:命令行参数及环境变量,栈区,堆区,静态区(初始化和未初始化),字符常量区,代码区。0xffffffff0xffffffff0xffffffff\qquad命令行参数及环境变量\qquad栈区\qquad堆区\qquad未初始化数据\qquad初始化数据\qquad代码段0x000000000x000000000x00000000静态变量\qquad在程序执行前系统就为之静态分配存储空间的一类变量,即在运行时中不再改变分配情况。静态变量的生命周期均为整个源程序。

2021-09-21 21:23:18 252

原创 排序算法的效率对比分析

排序方法平均最坏最好空间稳定性直接插入排序O(n)O(n)O(n)O(n2)O(n^2)O(n2)O(n2)O(n^2)O(n2)O(1)O(1)O(1)稳定希尔排序O(n2)O(n^2)O(n2)O(n1.3)O(n^{1.3})O(n1.3)O(1)O(1)O(1)不稳定简单选择排序O(n2)O(n^2)O(n2)O(n2)O(n^2)O(n2)O(n2)O(n^2)O(n2)O(1)O(1)O(1)不稳定堆排序O(nlogn...

2021-09-19 21:42:14 454

原创 八大排序详解 (图文 + c++代码)

文章目录一.插入排序1.直接插入排序一.插入排序1.直接插入排序即将序列分成有序、无序的两部分,初始时有序部分为最左边1个,无序部分为右边的n-1个。通过n-1趟排序,每一趟将右边无序部分的第一个元素插入到左边有序部分中,最终获得排序序列。//1.插入排序void insertsort(int a[],int n) { //直接插入,O(n^2),稳定 int i, j; for (i = 2; i <= n; i++){ if (a[i - 1] > a[i]) {

2021-09-15 10:07:20 411

原创 图的基本知识

图是由顶点结点集V和边集E组成,记为G=(V,E)V={v1,v2,...,vn}E={(u,v)∣u∈V,v∈V}V=\{v_1,v_2,...,v_n\} \qquad E=\{(u,v)|u\in V,v\in V\}V={v1​,v2​,...,vn​}E={(u,v)∣u∈V,v∈V}V(G):图G中顶点的有限非空集。 |V|:顶点数E(G):图G中边集。 \qquad\qquad\quad|E|:边数1.图的概念有向图弧:<v,w>,从弧头v到弧尾w

2021-09-11 22:47:08 243

原创 windows修改文件后缀名(文件扩展名)

1.直接修改打开我的电脑->查看->文件拓展名 勾上即可before\qquad\qquad\qquad\qquad\qquadafter \qquad\qquad2.任何文本编辑器->另存为->保存类型选所有文件

2021-09-08 21:13:12 2959

原创 层次、树高/深、路径长度、带权路径长度

层次:从树根开始定义,树根为第一层深度:从根开始,向下累加高度:从叶开始,向上累加这里定义:树的高度/深度为数中结点最大层次数。A到B的路径长度:A到B所经过的边数(B层数 - A层数)树的路径长度:从根到树中每一结点的路径长度之和。在结点数目相同的二叉树中,完全二叉树的路径长度最短。带权路径长度:根到该结点的路径长度×\times×该结点的权值\qquad\qquad\qquad(A层数 - 1)×\times× A权值树的带权路径长度(WPL):所有叶结点带权路径长度之和.

2021-08-22 20:43:47 4147

原创 平衡二叉树AVL、哈夫曼树

文章目录定义平衡二叉树的插入AVL的最少结点完全不知道写的什么东西定义首先,平衡二叉树也是二叉排序树(搜索树)其次,AVL树的任何一个结点,左右子树的高度差的绝对值不超过1。平衡二叉树可以是是空树\qquad因为一般的二叉排序树,如果直接输入排序数据,就会产生一棵单支树,其平均查找长度为O(n)O(n)O(n)。\qquad如果限制其每个结点的左右子树高度差不超过1,那么平均查找复杂度为O(logn)O(logn)O(logn)。平衡因子:某节点的左子树与右子树的高度(深度)差即为该节点

2021-08-21 20:14:12 472

原创 二叉排序树BST

二叉排序树:要么是空树,要么是 左子树结点值 <<< 根结点值 <<< 右子树结点值 的二叉树。左 <<< 根 <<< 右,中序遍历可以得到一个递增的序列。1.插入构建二叉排序树的插入只会插入到空的结点上面,形成新的叶结点。每次可以比较,向下移动至正确的空结点上。如果有相同值的结点,那么插入失败。递归插入://递归插入bool Insert(BSTree &T, int x) { if (T == NULL) {

2021-08-21 17:07:43 143

原创 树、森林与二叉树的转换

文章目录一.转换1.树⟷\longleftrightarrow⟷二叉树2.森林⟷\longleftrightarrow⟷二叉树题——空指针计算:二.遍历1.树:2.森林:三.树练习1.求树叶子结点个数2.求树高树:一种逻辑结构,其存储结构有顺序、链式存储。树的三种表示法:1.双亲表示法——顺序存储,每个结点包括:结点值data、双亲的下标parent。一般用数组实现。2.孩子表示法——链式存储,将每个结点的孩子用单链表连接起来。3.孩子兄弟表示法——链式存储(二叉树表示法),每个结点包括:结点值d

2021-08-20 22:19:44 2250

原创 五.二叉树——习题解

文章目录一.递归1带返回值2.带参数deep3.三种遍历变体4.叶操作一.递归1带返回值1.求高度——递归返回型,返回一个int值。int Depth(BiTree T) { if (T==NULL) return 0; else return Depth(T->lchild) > Depth(T->rchild) ? Depth(T->lchild)+1 : Depth(T->rchild)+1; //return T == NULL ? 0 : De

2021-08-18 16:25:14 267

原创 前、中、后序列遍历的应用

后序递归遍历销毁二叉树后序非递归找到某个结点的所有祖先 ????计算树长 ????层序遍历计算树长(level=0,last=1)判断是否为完全二叉树

2021-08-17 21:06:55 573

原创 层序遍历的应用——求树高、树宽

由于在考研的算法题中,栈/队列一般都是通过在函数中设立数组完成(顺序,链式一般不用),所以以后的栈/队列都在用数组操作完成。层序遍历层序遍历需要借助队列,根先入队,然后每次出队一个结点,若其有左/右结点,就将其左/右结点入队。这样出队的顺序就是按照从上到下,从左到右的层序遍历顺序。void LevelOrder3(BiTree T) { BiTree Q[100]; //假设足够大 int front = 0, rear = 0; BiNode* p; Q[rear++] = T;

2021-08-17 20:16:48 770 5

原创 求二叉树的高度

文章目录一.递归二.非递归1.层次遍历——队列2.后序遍历——栈需要获得树的长度,必然要遍历整颗树所有节点。直观的方法是直接递归。开始/递归终止都是:if(T=NULL) return 0;一.递归终止条件:T==NULL; return 0;循环体:以T为根的长度,是其左子树、右子树中长度大者+1int Depth(BiTree T) { if (T==NULL) return 0; else return Depth(T->lchild) > Depth(T

2021-08-15 20:00:03 272

原创 题:后序遍历可以找到m到n的路径

参考文章指向????题源:王道p139\qquad在二叉树中有两个结点m和n,若m是n的祖先,则使用后序遍历可以找到从m到n的路径。\qquad此处找到从m到n的路径,意思是此时栈中可以找到m到n的路径,即栈存储的都是n的祖先(默认为非递归,递归的话一股脑全输出了没法操作)????非递归遍历中栈的知识详解\qquad因为先序、中序都会在根及左子全部压入后,弹出,所有处在根左子树上的某个右子结点,就会先弹出他的左兄弟,父结点,然后将其压栈。因此,双亲出栈后才会压入右节点,故不可能找到右节点到根的

2021-08-15 17:33:41 5212 1

原创 线索二叉树

2021/08/142021/08/142021/08/14文章目录

2021-08-14 16:43:06 72

原创 二叉树非递归遍历——压栈分析

参考文章指向????题源:王道p139在二叉树中有两个结点m和n,若m是n的祖先,则使用后序遍历可以找到从m到n的路径。此处找到从m到n的路径,意思是此时栈中可以找到m到n的路径,即栈存储的都是n的祖先(默认为非递归,递归的话一股脑全输出了没法操作)#mermaid-svg-jK6gpvtfH5r2gTqf .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#3

2021-08-13 22:04:32 991 1

原创 markdown中常用的HTML标签

列表

2021-08-12 22:37:10 1065

原创 二叉树遍历的非递归实现

文章目录前序中序辅助的栈前序递归实现:void PreOrder(BiTree T){ if(T!=NULL){ cout<<T->data; PreOrder(T->lchild); PreOrder(T->rchild); }}非递归实现需要借助栈——栈顶出栈,先右后左压栈递归实现是NLR,输出当前结点,再进入左子树遍历,然后进入右子树遍历。每次<输出根,向左>*n,其中遇到右子树转右,在进行前面的操作。非递归实现:1.根压栈

2021-08-12 21:14:53 456 1

原创 二叉树的遍历

文章目录前序遍历—NLR中序遍历—LNR二叉树的遍历都是先左后右,实际是一路遍历左结点,直到孩子为空,返回的时候访问其他结点(如右结点),继续以右节点为基础一路访问左结点。总体是一路向左,没有了返回访问其他结点顺便换路线,再向左。而“序”表示输出的位置——访问根的位置。前序遍历—NLRvoid PreOrder(BiTree T){ if(T!=NULL){ //每一次递归都会进入一个新子树,T为子树的根 cout<<T->data; //每访问一个子树先访问根

2021-08-11 20:10:58 417 2

最新 Intel SGX SDK 、PSW、DCAP for Windows

用于windows环境下在Visual Studio中创建sgx程序(Enclave项目),在可信环境中运行代码。

2022-05-13

空空如也

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

TA关注的人

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