自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

原创 滑动窗口-3(To be continued)

确定同向双指针 left=0, right=0进窗口 将right指针指向的数据纳入计算范围判断出窗口 将left指针指向的数据从计算结果中删除。

2024-04-11 21:49:31 307 2

原创 C# 格式化输出

具体而言,`num.ToString("N4")` 使用标准的数字格式化字符串 `"N4"`,这告诉 `ToString` 方法将数字格式化为包含逗号分隔符的格式,并保留小数点后的四位数字。在这个字符串中,`{0}` 表示第一个参数,即 `(long)num`,而 `{1}` 表示第二个参数,即 `(num - (long)num) * 10000`,即小数部分乘以 10000。2. `(long)num`: 这部分 `(long)num` 是用来获取 `num` 的整数部分的,即去掉小数部分。

2023-10-26 09:23:08 687

原创 代码随想录 DAY28 93.复原IP地址 78.子集 90.子集II

如果最后一小节符合要求,就将该字符串添加到结果集中。切割字符串,并且在每一个切割过的字符串后面加上 ‘ .’循环中:从start到i 符合要求,就继续添加逗点和字符。子集重复就是数字重复,和上一级递归的数字比较是否使用过。不符合下面就不用看了。不要试图一下找完,从第一个开始算。只是判断生成的子集是否重复。返回条件:逗点个数==3。

2023-07-25 17:01:51 462

原创 代码随想录DAY 27 39. 组合总和 40.组合总和II 131.分割回文串

和上题一样都是在原来的字符串(数组)中判断是否为回文数(相似)判断上一个不能与下一个要加入的数字相同。是否和滑动窗口有些相似?

2023-07-25 15:20:56 396

原创 代码随想录 DAY25 216.组合总和III 17.电话号码的字母组合

和77的写法一样,只不过多加了一个判断条件。只是将数字的组合转换为数字代表的字母组合。1、sum>n 不用继续递归了。2、path中的个数超出k。也只是改结束条件和回溯范围。17.电话号码的字母组合。216.组合总和III。

2023-07-24 15:59:04 248

原创 代码随想录DAY 24 回溯算法 77. 组合

参数start:path里的第二个数从哪一个开始。结束条件:path里面已经达到要求个数。回溯算法可解决树形问题。

2023-07-24 14:04:07 287

原创 代码随想录DAY23 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树

对于递归思想和二叉搜素树的理解递归直接返回上一级非递归写法找到合理的范围,root 的子树就存在不符合条件的,修剪root的子树。

2023-07-24 11:15:21 187

原创 代码随想录DAY22 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

缩小范围,找到最近的公共祖先,判断两个指定节点的值是否同时大于/小于子树的值。就是在二叉树中找到合适的位置。二叉树的特性是有序==可以依照数值判断节点在哪里。下面这两题让我想起来了当初学二叉搜索树调整的日子。2、删除正在访问的节点,递归返回值连接上双亲结点。递归就是把非递归中的while循环部分拆开来写。235. 二叉搜索树的最近公共祖先。如果根节点为空,就证明没找到,返回空。不能缩小范围,就证明已经找到了最近的。450.删除二叉搜索树中的节点。3、删除的五种情况,五种返回值。被迭代法感动得痛哭流涕。

2023-07-23 23:35:18 150

原创 代码随想录DAY21 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先

首先遍历树,将树的节点去重放进unordered_map里,key(first)放节点值,value(second)放节点出现的次数。map是按照key排序,在这里key 就存节点出现次数,但是未遍历完出现次数不确定。中序遍历二叉搜索树,后一个节点值减去前一个节点值的最小结果。先找到一个节点,再找到另一个节点,然后返回他们的根节点。注意if 的顺序,为什么要这样?最后,将出现次数最大的值放入结果集。二叉搜索树的遍历框架几乎都是一样的。530.二叉搜索树的最小绝对差。普通的树,未使用二叉搜索树的特性。

2023-07-22 18:40:47 200

原创 代码随想录 DAY20 654. 最大二叉树 617.合并二叉树 700. 二叉搜索树中的搜索 98.验证二叉搜索树

二叉搜索树中序遍历得到一个有序序列,只需要比较前一个节点值是否小于后一个节点值。这道题和之前写的(105. 从前序与中序遍历序列构造二叉树)是一个原理。题意:从一个数组里面找最大值当作树的根,左边是左子树,右边是右子树。因为二叉搜索树的有序性,直接确定了我们下一步要去哪一个方向去寻找它。前一个节点即为左子树的最右节点(左子树中序遍历的最后一个节点)只要有一个树为空,就不用考虑他,只看另一个就行了。注意root1与root2为空的情况。比根节点值大的是右节点。比根节点值小的是左节点。注意判断树节点是否为空。

2023-07-22 16:05:05 337

原创 代码随想录DAY18 513.找树左下角的值112. 路径总和 113. 路径总和ii 106. 从中序与后序遍历序列构造二叉树105. 从前序与中序遍历序列构造二叉树

走到叶子节点&&得到相应总值 返回ture。若走到叶子节点但没有得到相应总值 返回false。首先减去根节点的左子树值,判断其左子树是否符合条件(即再次进入递归)符合条件 返回true。使用层序遍历,因为层序遍历使用的时队列,所以头部的元素(i==0)是最左侧的。不符合条件 根节点的值恢复原样(就当没来过左子树)中序遍历找出左右子树的节点数,分割后序遍历。就是遍历,遍历过程中记录路径之和。为什么写成private?后序遍历确定根节点,分割中序遍历。目标节点的根节点(上一个节点)若不是叶子节点,继续递归。

2023-07-19 22:06:04 183

原创 代码随想录 DAY 17 110. 平衡二叉树 257. 二叉树的所有路径 404.左叶子之和

左叶子的根节点才可以判断出来是左叶子。找到所有的左叶子,左叶子的存在条件。最大深度+判断左右子树深度之差。257. 二叉树的所有路径。递归方法就是换一种方式遍历。1、添加 “->” 符号。2、终止条件,找到叶子节点。当走到左叶子的根节点时相加。110. 平衡二叉树。类似找叶子节点的写法。

2023-07-19 17:10:24 59

原创 代码随想录 DAY 16 104 二叉树的深度111. 最小深度222. 完全二叉树的节点个数

和最大深度不一样,这个要考虑只有做、右子树的情况。同层序遍历,只不过是当找第一个到叶子节点时返回。222. 完全二叉树的节点个数。根节点+左右子树深度的最大值。104 二叉树的深度。

2023-07-15 18:05:57 179

原创 代码随想录DAY15 102. 二叉树的层序遍历 226. 翻转二叉树 101. 对称二叉树

这个队列只保留每一层的节点,当访问一个节点后,pop出去,将它的孩子节点全部加入到队列里。非叶子对称:左右叶子的数值相等 && 左右子树也是对称的(在这里递归)叶子对称:左右子树都为空,其他都是不对称。重点:要控制每个访问的节点都不能是空节点。因为是按照进入的顺序出去,比较容易想。子树对称,子树的子树也要对称。102. 二叉树的层序遍历。决定访问的次序是输入的次序。递归就正常交换左右子树。在遍历的时候反转就行了。226. 翻转二叉树。101. 对称二叉树。

2023-07-14 21:45:58 79

原创 代买随想录DAY14 二叉树的递归遍历 迭代遍历 统一写法(先序遍历、中序遍历、后序遍历)

根节点先进入栈,保留根节点的左右子树,右子树先进入,左子树再进入。后序遍历只需要反转一下结果就行了,但中序遍历不是这样。三种递归遍历只是进入结果集的顺序不一样,其他都一样。中序遍历需要一直找到最左端的节点,再访问中根节点。栈保持了出入的顺序一致,而队列不能保证此种效果。设置标志位,在要输出的节点后添加一个空节点。遇到非空节点,还需要继续向寻找节点。无论前中后序,变化的都是进入栈的顺序。遇到空节点,证明已经到达目标节点。结果集必须保持不变,使用&当节点为空时返回退出。

2023-07-14 16:32:23 208

原创 代码随想录DAY11 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值

先讲一下我在自己的写法,好麻烦。我不太理解string 是否可以自己运算,和类型转换的一些知识,所以我打算把每一个string转化成为int 数据(自己写了一个string 转int 的函数)。先理解题目:有效的括号是指当遇见一个)或] 或}时都有相应的前半个括号匹配。2、没有对应的左括号:栈为空(第一个就是右括号)栈不为空,但括号类型不对。这道题要求的是临近的半个括号匹配,需要用到栈的后进先出的特点。3、没有对应的右括号:栈一定不为空,括号类型不对。很多时候吧,大思路都是对的,但是具体实现是错的。

2023-07-12 21:50:45 160

原创 代码随想录DAY13 239. 滑动窗口最大值 347. 前 K 个高频元素

push:若入口(back)元素小于将要进入的元素(value),则不断弹出入口元素(pop_back)直到为空或入口元素大于value。pop:当数值==出口(front)元素时,弹出出口元素(pop_front)。在这个方法中使用deque重新写了一个类myqueue 代替暴力中的第二个for循环。首先要得到每一个数据的出现次数,将他们集合在unordered_map里面。使用小堆,就建一个大小为k的小堆,如果出现次数大于堆顶数据就进堆。将所有元素都放到map里面,key放值,value放出现的次数。

2023-07-12 21:46:57 72

原创 代码随想录DAY10 232. 用栈实现队列 ​ 225. 用队列实现栈​

MyQueue 初始化一个栈,因为在类里已经写了设计两个栈stIn和stOut所以在此函数中可以什么都不写。大多数的题都是在考这两个特性。但是怎样在抽象题目中使用栈和队列我还不清楚。pop 先从stIn出来全部导入stOut之中12345->1 5432。peek同pop函数只是不删除stOut中的栈顶元素。我的这种方法只是保持了一个栈始终为空,但是有些复杂了。将stOut中的数据导入stIn里。之后pop出stIn。这种写法是将另一个栈也当作存储数据的。empty两个栈都得为空。stIn永远是队列尾部。

2023-07-10 14:56:15 146

原创 代码随想录DAY6 242. 有效的字母异位词 ​​​​​​349. 两个数组的交集​ ​ 202. 快乐数 ​1. 两数之和​

那么判断元素是否出现,这个元素就要作为key(类似数据库中主键,用来查找),所以数组中的元素作为key,有key对应的就是value(就是值,key附带的),value用来存下标。我直接将全部的元素都加入map里了,但是find只能查一次,他总是找到最先查找到的那个。接着遍历第二个字符串,更改刚才的arr数组,只不过这次是(- -),若两个字符串相等,arr应该还是初始状态(都是0)创建一个数组arr,以下标代表字符串中的字母,解引用就是字幕出现的次数。哈希表有三种:数组、set(集合),map(映射)

2023-07-05 16:22:01 69

原创 代码随想录DAY4

找入口:meet指针(快慢指针相遇的地方)和起始指针(头指针)一起走,相遇的地方就是环的入口。第一遍写,没有写头节点,在输入[1], 1时报错了,不能删除,在第三部分加补丁之后结果误删。2、只是两两交换了,当第三个指针移动的时候就会找不到(因为只固定了正在交换的两个指针)挺简单的一道题,和上面那道的思路是一样的,只不过这一题不用空指针。还是长度不一致(快慢指针)判断两个链表相交条件(a==b)的问题。当交换链表中两个结点时,一定需要知道两个节点之前的点。第二遍写,加上了头节点,其他地方几乎不变,成了。

2023-07-04 15:58:30 70

原创 代码随想录DAY3 203.移除链表元素 207.反转链表

直接创建一个新的表。=val时就加入新表。创建一个新的头节点newnode,用于标注反转后的链表。其实代码也很简单,就是必须要弄懂每个之间的的关系。在原链表上更改,其实就是链表的删除操作。while循环的终止条件时原链表走到尾。保留反转结点的下一个pre。指向当下反转的结点cur。注意这三个结点都需要移动。过两天专门开一期写这个。

2023-07-03 11:59:13 59

原创 代码随想录DAY2 977.有序数组的平方209.长度最小的子数组59.螺旋数组

无论从哪个方向开始走,都需要保证使用的是同一个标准(左闭右开或左开右闭)(自己写代码时,大的方向是对的,但是一直错细节,就像先后顺序之类的)后来看题解,使用库函数sort(快速排序)替换简单插入排序。两个指针从nums两边往中间走,并将平方后的数字进行比较。但是排序过程中超出了时间限制,简单插入排序真的很慢。创建一个新的容器, 将较大的数字放在末尾。第一个for循环,确定子数组的起始位置。第二个for循环,确定子数组的末尾位置。首先想到的就是暴力,先平方再排序。这个解法最重要的是三个指针的位置。

2023-06-30 22:31:13 56

原创 代码随想录DAY1: 704 . 二分查找27. 移除元素

1、只有思想是对的,但是在范围方面是错滴。这个方法的灵魂:在涉及到改变两个指针位置的算法中都必须判断low

2023-06-28 23:59:29 317

原创 C++ 类与对象(中)构造函数 析构函数

完成资源清理工作比如:释放之前开辟的空间,将数值置为0等。

2023-01-24 23:11:24 85

原创 C++ 类和对象(上) 访问限定符 域操作符 this指针 类的定义

使用关键字class 来确定一个类类的成员:类中内容类中变量:成员变量(再给成员变量命名时,为避免重复,尽量在成员变量中+ _下划线)类中函数:类的方法 / 成员函数函数的声明与定义分离的情况,成员函数名前需要加域操作符。

2023-01-20 17:52:28 125

原创 C++内联函数 如何使用、优缺点

3、声明和定义分离会导致连接错误。因为在形成汇编语言(.o文件)时没有将内联函数的地址写入符号表,所以当调用内联函数时找不到内联函数。内联函数是为了取代C语言中的宏而存在的。(被括号和分号支配的恐惧)宏不能调试,且无类型安全检查。1、可是它的展开视编译器而定(有的编译器展开有的编译器不展开)。当代码太长的时候展开内联函数反而会浪费时间。而内联函数很好地补充了这些。他在书写上与普通函数一样。2、当代码太长的时候展开内联函数反而会浪费时间。频繁调用的小函数(语句简单)

2023-01-20 16:17:50 430

原创 C++引用(&)解析:引用的作用,什么时候使用引用,引用与指针的不同

内存空间被销毁后,空间还在,也可以访问,但是数据不被保护,读写数据都不稳定。5. 在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32 位平台下占4个字节,64 位平台下占8个字节)3. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何 一个同类型实体。但是使用引用返回会出现一些问题:返回的是数据的别名,但是数据的真实存储已经被销毁了。出了作用域,返回变量不存在,就不能用引用返回。在指针和引用赋值中,权限可以缩小,不可以放大。

2023-01-20 15:49:35 982

原创 C/C++ 插入排序、希尔排序、选择排序、冒泡排序、快速排序及其复杂度计算

1、left 停下(表示已经找到比key大的数,且已经交换过,此时left的数比key小),right走,right遇到left(此时right没有找到比key小的数字,但是已经不满足条件left

2023-01-07 17:02:58 134

原创 环形链表C/C++数据结构

目录什么是环?例题 141. 环形链表公式推导:环形链表二 142. 环形链表 II方法一:方法二:类似这种,结点下一个指针又指向链表本身,这样若遍历链表的话则会变成死循环。 特殊情况:自己也有可能成环 环的特点:有两个指针指向环的起点判断是否有环使用快慢指针,进入了环就变成了追及相遇的问题 思路:快指针一次走两步,慢指针一次走一步,当两个指针相遇时,即在链表中存在环 问题:为什么是快指针一次走两步?慢指针一次走一步?公式推导:假设链表中无环快指针走的距离=2*慢指针走到距离假设链表中有环进环

2022-12-05 16:28:13 1153

原创 resize 详细讲解 C++

resize 函数 是一个替换字符串长度的函数,有两个重载函数,第一个参数都是替换之后的大小,第二个为替换的字母初始字符串123456 resize(n)中的n 比原来的长度小 resize(n)中的n 比原来的长度大,空字符为‘\0’ a.resize(12,'a') 将新扩展的空间填充为字符‘a' 输出结果

2022-12-03 21:37:17 6224

原创 python GUI Tkinter 编程 附案例

GUI变成使用的objects 叫做widgets,widget中有button,menu, canvas,tsxt,entry,frame,label 等。mainloop()启动一个无限事件循环,通过调用窗口的无限循环来处理用户事件,当用户事件发生时,事件循环调用与该事件关联的函数。Label函数:第一个参数这个Label在何地,第二个参数为文本内容,第三个参数为文字颜色,第四个为背景颜色。用户不能进入一个无法辨认的命令行,每一个命令行都以图形按钮的方式呈现。运行一个窗口 mainloop()函数。

2022-12-02 19:47:51 1804

原创 代码随想录算法训练营第六天 | 704二分查找、349.两个数组的交集

哈希表适用于给你一个元素,判断是否出现在哈希表中哈希表有三种呈现方式数组适用于数据有限的列表。

2022-11-27 21:01:48 92

原创 代码随想录算法训练营第一天 | 704二分查找、27.移除元素

在数组中怎么才算真正删除?覆盖掉原来的值。

2022-11-16 22:57:27 175

原创 SQL语言多表查询

多表查询的基础是单表查询,一些基本的语句都在单表查询中介绍过了。

2022-11-09 21:38:40 3977

原创 空间复杂度

空间复杂度是一个数学表达式,是算法在运行过程中。所以每次外部 for 循环都是使用的同一块空间。每个func的函数栈帧是常数个(本例为1个)每个栈帧里开辟常数个空间(本例为1个)空间复杂度栈上、堆上的空间都要算。计算空间复杂度:斐波那契数列。O(1)代表常数个空间复杂度。计算空间复杂度:冒泡排序。空间复杂度为 O(1)计算空间复杂度:递归。空间复杂度为O ( )O( N ),空间复用。函数调用需要建立栈帧。调用n次func函数。

2022-11-04 18:11:50 103

原创 C/C++ 时间复杂度--数据结构(嵌套循环、冒泡排序、二分查找、递归、斐波那契数列的分析)

完成代码所需要的时间一个算法花费的时间与其中语句的执行次数成正比,所以算法中的基本操作的执行次数,为算法的时间复杂度。不需要精确的时间复杂度的计算,只需要大概就OK,把对结果影响不大的值给去掉。使用大O的渐进表示法O( 1 )不代表是1次而是常数次时间复杂度不要去数循环。

2022-11-04 17:16:13 601

原创 C/C++字符串函数strtok()详解

strtok() 的原理是将查找到与delimiter相同的部分字符串的首位变成 ' \ 0 ',然后返回str的首元素地址,完成”截断“行为。若在使用过一次 strtok() 函数之后再次使用strtok() 函数,可不加参数。若之前未使用过 strtok() 函数,不加第一个参数的话,编译器会崩溃的。原因:第一次使用完毕之后 strtok() 函数会保存使用过的地址。找到与delimiter相同的地方,将其截断,并返回str。返回值为char * ,一般默认返回str的地址。

2022-11-03 20:38:28 2456

原创 C/C++ strStr()字符串函数的实现

首先肯定得把str1遍历一下吧,鉴于函数声明中是指针,没有字符串的长度,只好使用while循环了。需要三个指针,除去标记两个字符串的指针,还需要有一个在str1中的定位指针。strstr函数用于比较str1字符串中是否含有str2字符串。只有当str1中的部分完全等于str2的时候才将两个指针一起移动。

2022-11-03 15:06:09 495

原创 C/C++汉诺塔问题

并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。其实我想,大部分的递归问题都可以采用这个思路,n-1个与第n个的关系。只需要考虑第n个需要怎么做就行了,剩下的n-1个不过就是复制粘贴而已。只需要将所有的盘子分成两堆,一堆是从第 1 个盘子到 n - 1 个盘子,另一堆只有一个盘子那就是第 n 个盘子。第二步:将最后一个(第n个盘子)从A柱移动到C柱——直接移动。第一步:将n-1个盘子从A柱移动到B柱——以C柱作为中转站。第三步:将n-1个盘子从B柱移动到C柱——以A柱作为中转站。

2022-11-02 17:08:27 247

原创 C/C++指针详解(附例题)

我们口头中的指针又称为指针变量,指针变量存储的是地址。在深入了解指针前首先要认识两个符号*(解引用操作符)和&(取地址操作符)*(解引用操作符)常常使用在指针变量之前,表示取得指针指向的值&(取地址操作符)取某变量的地址下面举一个例子&num表示取得num变量的地址int * a 表示声明一个名称为a的int * 类型的指针变量int * a = & num 表示将num 的地址赋予a 这个指针变量可以通过监视来验证我们的想法a是表明&num的变量,那&a呢?

2022-10-29 21:30:37 2141

空空如也

空空如也

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

TA关注的人

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