自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录算法训练营第十天|239.滑动窗口最大值 347.前K个高频元素

push(value):如果push的元素value大于入口元素的数值,那么就将队列入口的元素弹出,直到push元素的数值小于等于队列入口元素的数值为止。此时我们需要一个队列,这个队列呢,放进去窗口里的元素,然后随着窗口的移动,队列也一进一出,每次移动之后,队列告诉我们里面的最大值是什么。其实队列没有必要维护窗口里的所有元素,只需要维护有可能成为窗口里最大值的元素就可以了,同时保证队列里的元素数值是由大到小的。不要以为实现的单调队列就是对窗口里面的数进行排序,如果是这样,那和优先级队列又有什么区别呢。

2024-02-06 20:12:58 894 1

原创 代码随想录算法训练营第九天|20.有效的括号 1047.删除字符串中的所有相邻重复项 150.逆波兰表达式求值

我们在删除相邻重复项的时候,其实就是要知道当前遍历的这个元素,我们在前一位是不是遍历过一样数值的元素,那么如何记录前面遍历过的元素呢?所以就是用栈来存放,那么栈的目的,就是存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素。第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号。题意其实就像我们在写代码的过程中,要求括号的顺序是一样的,有左括号,相应的位置必须要有右括号。换句话说,表达式总会得出有效数值且不存在除数为。

2024-02-04 16:47:20 886 1

原创 代码随想录算法训练营第八天|232.用栈实现队列 225.用队列实现栈

栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能)。你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)。使用栈来模式队列的行为,如果仅仅用一个栈,是一定不行的,所以需要两个栈。从下图中可以看出,栈的内部结构,栈的底层实现可以是。刚刚讲过栈的特性,对应的队列的情况是一样的。

2024-02-03 12:33:59 925 1

原创 代码随想录算法训练营第七天|344.反转字符串 541.反转字符串II 卡码网:54.替换数字 151.翻转字符串里的单词 卡码网: 55.右旋字符串

此时第一段和第二段的顺序是我们想要的,但里面的字符位置被我们倒叙,那么此时我们再把第一段和第二段里面的字符再倒叙一把,这样字符顺序不就正确了。想一下,我们将整个字符串都反转过来,那么单词的顺序指定是倒序了,只不过单词本身也倒序了,那么再把单词反转一下,单词不就正过来了。对于字符串,我们定义两个指针(也可以说是索引下标),一个从字符串前面,一个从字符串后面,两个指针同时向中间移动,并交换元素。在字符串相关的题目中,库函数对大家的诱惑力是非常大的,因为会有各种反转,切割取词之类的操作。输入字符串以字符数组。

2024-02-01 18:02:55 886 1

原创 代码随想录算法训练营第六天|454.四数相加II 383.赎金信 15.三数之和 18.四数之和

给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。大于零,由于数组是有序的,后续的元素都会大于零,所以不存在满足条件的三元组,可以直接返回结果。的值并存入哈希映射中。很像,也能用哈希法,但用哈希法会很麻烦,双指针法才是正解。遍历排序后的数组,使用双指针法来寻找满足要求的三元组。,说明已经考虑过这个数,为了避免重复,我们跳过这个数。本题思路整体和三数之和一样的,都是双指针,但写的时候。

2024-01-31 19:46:06 938

原创 代码随想录算法训练营第五天|242.有效的字母异位词 349.两个数组的交集 第202题. 快乐数

但是,使用数组来做哈希的题目,是因为题目都限制了数值的大小。在本题中,使用数组作为哈希表用来存放每次计算的结果,初始数组都为。如果学生的数量大于哈希表的大小怎么办,此时就算哈希函数计算的再均匀,也避免不了会有几位学生的名字同时映射到哈希表。哈希函数,把学生的姓名直接映射为哈希表上的索引,然后就可以通过查询索引下标快速知道这位同学是否在这所学校里了。大家要了解哈希表的内部实现原理,哈希函数,哈希碰撞,以及常见哈希表的区别。,因为它的查询和增删效率是最优的,如果需要集合是有序的,那么就用。

2024-01-30 16:49:42 844 1

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

概述:先分别计算出两个链表的长度并计算长度差gap,之后让较长的链表向前移动 gap 步,这样两个链表就实现了尾部对齐(即操作两个链表的指针在同一起点上)。以上三步便可将一对节点交换,操作后链表变为:dummyHead -> 2 -> 1 -> 3 -> 4 -> null。建议使用虚拟头结点,这样会方便很多,要不然每次针对头结点(没有前一个指针指向头结点),还要单独处理。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

2024-01-29 16:34:54 807

原创 代码随想录算法训练营第三天|203.移除链表元素 707.设计链表 206.反转链表

如果 index 等于链表的长度,则该节点将附加到链表的末尾。这样移除了一个头结点,是不是发现,在单链表中移除头结点 和 移除其他节点的操作方式是不一样,其实在写代码的时候也会发现,需要单独写一段逻辑来处理移除头结点的情况。那么因为单链表的特殊性,只能指向下一个节点,刚刚删除的是链表的中第二个,和第四个节点,移除头结点和移除其他节点的操作是不一样的,因为链表的其他节点都是通过前一个节点来移除当前节点,而头结点没有前一个节点。如果再定义一个新的链表,实现链表元素的反转,其实这是对内存空间的浪费。

2024-01-26 17:26:45 928 1

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

这里一圈下来,我们要画每四条边,这四条边怎么画,每画一条边都要坚持一致的左闭右开,或者左开右闭的原则,这样这一圈才能按照统一的规则画下来。这里每一种颜色,代表一条边,我们遍历的长度,可以看出每一个拐角处的处理规则,拐角处让给新的一条边来继续画。解释:平方后,数组变为 [16,1,0,9,100],排序后,数组变为 [0,1,9,16,100]可以发现这里的边界条件非常多,在一个循环中,如此多的边界条件,如果不按照固定规则来遍历,那就是。循环,那么这个循环的索引,一定是表示滑动窗口的终止位置而不是起始位置。

2024-01-25 19:21:15 919

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

if (nums[middle] > target) right 更新为 middle,因为当前nums[middle]不等于target,去左区间继续寻找,而寻找区间是左闭右开区间,所以right更新为middle,即:下一个查询区间不会去比较nums[middle]if (nums[middle] > target) right 要赋值为 middle - 1,因为当前这个nums[middle]一定不是target,那么接下来要查找的左区间结束下标位置就是 middle - 1。

2024-01-24 17:04:04 378

空空如也

空空如也

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

TA关注的人

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