自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Task11| 20. 有效的括号| 1047. 删除字符串中的所有相邻重复项| 150. 逆波兰表达式求值

但还有一些技巧,在匹配左括号的时候,右括号先入栈,就只需要比较当前元素和栈顶相不相等就可以了,比左括号先入栈代码实现要简单的多了!建议在写代码之前要分析好有哪几种不匹配的情况,如果不在动手之前分析好,写出的代码也会有很多问题。那么什么时候说明左括号和右括号全都匹配了呢,就是字符串遍历完之后,栈是空的,就说明全都匹配了。我们的代码只要覆盖了这三种不匹配的情况,就不会出问题,可以看出 动手之前分析好题目的重要性。先来分析一下 这里有三种不匹配的情况,分析完之后,代码其实就比较好写了,

2023-06-28 11:14:59 1197 1

原创 Task09|232.用栈实现队列| 225. 用队列实现栈

在代码实现的时候,会发现pop() 和 peek()两个函数功能类似,代码实现上也是类似的,可以思考一下如何把代码抽象一下。,把que1最后面的元素以外的元素都备份到que2,然后弹出最后面的元素,再把其他元素从que2导回que1。但是依然还是要用两个队列来模拟栈,只不过没有输入和输出的关系,而是另一个队列完全用来备份的!所以用栈实现队列, 和用队列实现栈的思路还是不一样的,这取决于这两个数据结构的性质。使用栈来模式队列的行为,如果仅仅用一个栈,是一定不行的,所以需要两个栈。最后如何判断队列为空呢?

2023-06-26 12:35:44 1320 1

原创 Task08|344.反转字符串| 541. 反转字符串II| 剑指Offer 05.替换空格| 151.翻转字符串里的单词| 剑指Offer58-II.左旋转字符串

在C++中,提供一个string类,string类会提供 size接口,可以用来判断string类字符串是否结束,就不用’\0’来判断是否结束。字符串是若干字符组成的有限序列,也可以理解为是一个字符数组,但是很多语言对字符串做了特殊的规定,接下来我来说一说C/C++中的字符串。其实在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k 就可以了,然后判断是否需要有反转的区间。在C语言中,把一个字符串存入一个数组时,也把结束符 '\0’存入数组,并以此作为该字符串是否结束的标志。

2023-06-26 11:40:48 1367 1

原创 训练营Day06 |454. 四数相加 II| 383. 赎金信| 15. 三数之和

1.暴力2.哈希 找东西有没有问题,空间换时间3.题目中要找的只有小写字母,所以可以考虑用数组来存放值,索引就是按ASCII码排序,利用(array[i] - ’a‘)的操作。

2023-06-17 17:37:13 1763 1

原创 训练营第五天|242. 有效的字母异位词|349. 两个数组的交集|202. 快乐数|1. 两数之和

在遍历数组的时候,只需要向map去查询是否有和目前遍历元素匹配的数值,如果有,就找到的匹配对,如果没有,就把目前遍历的元素放进map中,因为map存放的就是我们访问过的元素。map目的用来存放我们访问过的元素,因为遍历数组的时候,需要记录我们之前遍历过哪些元素和对应的下标,这样才能找到与当前元素相匹配的(也就是相加等于target)那么判断元素是否出现,这个元素就要作为key,所以数组中的元素作为key,有key对应的就是value,value用来存下标。这样就将字符串s中字符出现的次数,统计出来了。

2023-06-15 12:17:25 1933

原创 算法训练营第四天|24. 两两交换链表中的节点| 19.删除链表的倒数第N个节点| 面试题 02.07. 链表相交| 142.环形链表II

这道题目正常模拟就可以了。建议使用虚拟头结点,这样会方便很多,要不然每次针对头结点(没有前一个指针指向头结点),还要单独处理。对虚拟头结点的操作,还不熟悉的话,可以看这篇。

2023-06-13 15:28:51 2145 2

原创 203.移除链表元素|707.设计链表|206.反转链表

采用的设置一个虚拟头结点(这样更方便一些,大家看代码就会感受出来)【避免了要将头结点单独抽逻辑出来操作的麻烦】这里来给链表添加一个虚拟头结点为新的头结点,此时要移除这个旧头结点元素1。可以说这五个接口,已经覆盖了链表的常见操作,是练习链表操作非常好的一道题目。来看一下,如何移除元素1 呢,还是熟悉的方式,然后从内存中删除元素1。依然还是在这个链表中,移除元素1。最后呢在题目中,return 头结点的时候,别忘了。这里以链表 1 4 2 4 来举例,移除元素4。, 这才是新的头结点。

2023-06-09 20:35:37 2379

原创 看到一篇比较好的对于最大最小滑动窗口的理解,记录一下

判断[i, j]是否满足条件while 满足条件:不断更新结果(注意在while内更新!i += 1 (最大程度的压缩i,使得滑窗尽可能的小)j += 1判断[i, j]是否满足条件while 不满足条件:i += 1 (最保守的压缩i,一旦满足条件了就退出压缩i的过程,使得滑窗尽可能的大)不断更新结果(注意在while外更新!j += 1是的,关键的区别在于,最大滑窗是在迭代右移右边界的过程中更新结果,而最小滑窗是在迭代右移左边界的过程中更新结果。

2023-06-08 15:01:10 52

原创 代码随想录算法训练营第二天| 59. 螺旋矩阵、209.长度最小的子数组、 977.有序数组的平方

这里一圈下来,我们要画每四条边,这四条边怎么画,每画一条边都要坚持一致的左闭右开,或者左开右闭的原则,这样这一圈才能按照统一的规则画下来。代码如下,已经详细注释了每一步的目的,可以看出while循环里判断的情况是很多的,代码里处理的原则也是统一的左闭右开。这里每一种颜色,代表一条边,我们遍历的长度,可以看出每一个拐角处的处理规则,拐角处让给新的一条边来继续画。窗口的结束位置如何移动:窗口的结束位置就是遍历数组的指针,也就是for循环里的索引。因为两边平方后比较最大值,最大值在数组的两头,方便比较。

2023-06-08 14:56:52 2547

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

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

2023-06-07 14:57:02 2722

原创 String内存分析题目

String内存分析内存布局图解析:调用change方法时,产生了一个新栈,创建了新的str指向java,但是在ex方法调用结束后,该栈销毁,所以在下一句执行时因为string的static属性,还是指向原有的str->hsp。str->hsp。在该实例中,方法里的ex.str是形参,在方法的新栈中指向了java,但是因为string类型是final属性,所以ex的实参还是指向堆中的str,并没有发生改变(在使用change方法时,str已经不指向堆,所以也没有办法改变)...

2022-04-15 16:36:40 324

原创 Jupyter notebook修改密码

Jupyter notebook修改密码1.命令行修改搜索’cmd’ 打开命令行输入指令: ’jupyter notebook password‘后按照指令输入密码以及确认密码2.修改配置文件生成配置文件:搜索’cmd’打开命令行 输入指令’jupyter notebook --generate-config‘执行后在命令行窗口会生成生成文件的路径按路径打开配置文件 搜索c.NotebookApp.allow_password_change并将值修改成c.NotebookApp.all

2021-04-30 10:45:44 1073

空空如也

空空如也

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

TA关注的人

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