代码随想录刷题
文章平均质量分 80
代码随想录一刷
m0_45172994
这个作者很懒,什么都没留下…
展开
-
代码随想录day23-回溯(1)
由于我们需要组合,那么如果剩余的元素个数比我们要求的长度都小的话,就不需要继续回溯下去了,这种情况就需要剪枝。我们总共的长度是。原创 2023-03-26 15:58:31 · 451 阅读 · 0 评论 -
代码随想录day18-二叉树(6)
,需要区分的是最后一层的最左边结点也有可能是右叶子结点,不一定是左叶子结点。原创 2023-03-13 23:41:21 · 174 阅读 · 0 评论 -
代码随想录day17-二叉树(5)
今天主要将之前的递归的方法稍微沉淀了一下,以及好好理解了一下回溯的思路。原创 2023-03-13 22:02:06 · 261 阅读 · 0 评论 -
代码随想录day15-二叉树(3)
如果说一棵树的左孩子的左侧和右孩子的右侧是相等的,左孩子的右侧和右孩子的左侧是相等的,如此下去,这个数就是镜像对称的,所以,这个题目我们要根据这一个点进行判断。这里要判定就是左孩子的左结点和右孩子的右结点,那么前提是什么呢,肯定要是这两个结点不为空啊,如果为空,不是直接就报错了吗,所以递归的终止条件就是在这个上面做文章。这每一条语句都有一个大前提,那就是node不能为空,node要是为空的话,每一句话都会报错,所以这就是为什么要寻找递归的终止条件。这里第二个题的前序遍历的解法涉及到回溯和递归的配合,和第。原创 2023-03-09 23:56:45 · 328 阅读 · 0 评论 -
代码随想录day14-二叉树(2)
使用递归法只需要换一下顺序即可。原创 2023-03-09 23:12:44 · 310 阅读 · 0 评论 -
代码随想录day13-二叉树(1)
经过前人的总结,二叉树具有以下几个性质:满二叉树以及完全二叉树的定义以及区别。满二叉树一定是完全二叉树,反之则不一定。满二叉树示意图:完全二叉树示意图:二叉树的顺序存储,指的是使用顺序表(数组)存储二叉树。需要注意的是顺序存储只适用于完全二叉树。换句话说,只有完全二叉树才可以使用顺序表存储。因此,如果我们想顺序存储普通二叉树,需要提前将普通二叉树转化为完全二叉树。堆就是典型的使用顺序表存储的一种完全二叉树。完全二叉树的顺序存储,仅需从根节点开始,按照层次依次将树中节点存储到数组即可。如上面所示的原创 2023-03-07 23:58:00 · 175 阅读 · 0 评论 -
代码随想录day12-栈与队列(2)
今天的题目涉及到两个知识点,单调队列以及优先级队列,需要好好学习一下二者的性质。原创 2023-03-07 00:09:35 · 158 阅读 · 0 评论 -
代码随想录day11-栈与队列(1)
栈和队列的基本思想:栈是先进后出(Fisrt in Last out, FILO) 的,而队列是先进先出(Fisrt in Last out, FILO)。栈只有可以被外界访问,所以栈是没有迭代器,也是不支持随机访问的,即栈是不支持遍历操作的。队列只有和可以被外界访问的,同样也是不支持随机访问,没有迭代器。不是容器。栈和队列可以理解为一种思想,而具体的实现通过vector,list以及deque都可以实现。而c++中的stack以及queue只能说是而不是容器,通常使用deque实现。原创 2023-03-04 23:49:06 · 172 阅读 · 0 评论 -
代码随想录day10-字符串(2)
LeetCode 151 反转字符串中的所有单词本题要求反转字字符串中的所有单词,并且要求我们去除多余的空格,比如连续的空格,前导空格,以及尾随空格等等。我们的第一步应该就是去除多余的空格。然后我们可以观察到,如果我们对字符串整体进行反转,那么得到肯定也可以反转每个单词,但是,单词内部的顺序也被反转了,所以还需要针对每个单词进行局部的反转,就可以得到答案。去除多余的空格;整体反转;局部反转。原创 2023-03-04 23:47:25 · 138 阅读 · 0 评论 -
代码随想录-day9 哈希表(3) & 字符串(1)
注意这里为什么是从后往前替换,设想一下,假设我们从前往后替换,那么每替换一个,所有的的字符都要往后移动,时间复杂度为O(n^2),但是如果我们从后往前替换,只需要遍历一次字符串即可,时间复杂度为O(n)。本题使用哈希表的方法也试过,最后的去重问题很难考虑清楚,在本文最后把相应的解答过程写一下。另外,这个题的和不是0,所以特殊情况的判定也是需要更改的。其中最重要的不同就是,之前有多个数组,所以在考虑排列的时候,不用考虑重复的情况。在之前的反转链表的时候也使用过双指针的思路来操作,这里依然用的双指针的思路。原创 2023-03-02 23:58:04 · 119 阅读 · 0 评论 -
代码随想录day3-长度最小的子数组
如果数组为 1 1 1 1 100, target = 101, 那么当left在第一个1的时候就已经满足105 > 101了,此时得到的子数组长度是5,但是明显最小的字数粗长度是2,所以这种情况就错误了!外层循环遍历数组的每个元素,内层循环从这个元素之后往后面遍历,并累计求和,一旦发现和sum大于target,此时就可以得到这个子数组的长度,不断更新。这里的更新方法很巧妙:我们需要一个最小值,那么我们就设置一个result=很大,这个很大就是int数值类型的上线。我们这里也使用了三目运算符进行更新,原创 2023-02-22 23:42:59 · 120 阅读 · 0 评论 -
代码随想录day8-哈希表(2)
首先使用map来统计nums1中的每个数字出现的次数,然后遍历nums2数组,如果发现其中的值也在nums1中,就将其加到结果中,否则跳过即可,注意匹配过的数字,在nums1中也要相应减1。具体的思路就是,依次遍历数组中的元素,如果target-num不在哈希表中,那么就添加进去,键为num的值,值为num的位置,因为我们map的查找是查找的键。这个题还是求交集,跟之前的那道题目不同的是,这个题要求如果存在重复的元素,也要输出出来,那么这道题就不能使用set来做,因为重复是考虑在我们的里面的。原创 2023-03-01 23:51:39 · 214 阅读 · 0 评论 -
代码随想录day2-移除元素与有序数组的平方
给你一个数组 nums 和一个值 val,你需要移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。这个题目考察的是移除数组中的目标元素,我们一般的思路就是找到并将其删除即可,但是,只能说遇到了目标值,就把它用后面的东西进行覆盖,这也就是的思路。用两层循环就可以实现,外层循环遍历数组,内层循环将开始出现目标值的时候的后面所有元素往前移动。原创 2023-02-22 23:04:23 · 90 阅读 · 0 评论 -
代码随想录day4-螺旋数组
今天的题目不涉及具体的算法,主要一个模拟的过程,比较考验对代码的掌控能力。主要就是几个螺旋矩阵的题目,此外,我还另外做了一道跟螺旋螺旋十分类似的模拟过程的题目,一起来研究一下吧。原创 2023-02-23 22:58:58 · 102 阅读 · 0 评论 -
代码随想录day5-链表(1)
本题,一开始cur是虚拟结点,那么cur->next就是我们需要操作的结点,所以while中的条件就是cur->next。反转过后,以前的头结点肯定作为最后一个结点,指向nullptr,所以我们要一开始就弄一个虚拟结点,让它指向nullptr。一般流程就是:定位到需要删除的结点的上一个结点,这里为了表示方便,我们记作pre,删除的操作就是一句话。注意虚拟头结点的使用,当遇到困难了,想想双指针法,以及虚拟头结点的方法,可以解决很多问题。当然,对于c++而言,我们还需要将需要删除的结点删除进行内存的释放。原创 2023-02-28 02:42:24 · 147 阅读 · 0 评论 -
代码随想录day1-二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。关于这种二分查找的题目,本质上都是可以用暴力方法求解的,就是从头到尾直接遍历就行了。但是随着数据量的增大,暴力算法往往会面临超时的情况,所以需要使用更高效的查找方法。就是一种高效的查找算法。二分查找的难点以及容易混淆的地方主要是两个点,即循环体内部的条件,到底是呢还是呢,以及边界的改变条件是left = mid还是呢?原创 2023-02-20 21:44:44 · 208 阅读 · 0 评论 -
代码随想录day6-链表(2)
要求删除倒数的第N个结点,我们设置一个先后指针,先指针从正数第N+1个结点出发,后指针从dummyHead出发,这样,当先指针到达nullptr的时候,后指针正好可以到达。**总结:**这两天关于链表的题目稍微做了一些,有一点儿初步的感觉,主要两个点就是双指针以及虚拟头结点,等一刷完成后,再做做这些题,顺便扩展一下其他的题目。知道了这一点之后,就可以开始写代码了。本题最简单的思路就是分别遍历两个链表,获得两个链表的长度,然后将两个链表按照尾巴对齐,然后从短的头部进行遍历,就能得到链表相交的起始结点。原创 2023-02-28 03:04:54 · 143 阅读 · 0 评论 -
代码随想录day7-哈希表(1)
上面代码的for(auto& : s)是c++11的新特性,foreach循环遍历,其中auto也是c++11新特性,自动推导类型,使用&是引用传递,防止传递参数过程中进行拷贝。我们可以将strs中的每个元素排序,然后作为键,将没排序的作为值,注意,这个值是vector,因为可能有很多个,而我们最终需要的,也是这一个一个的vector。,这是哈希表中非常经典的一种体型,使用的方法也差不多,需要掌握。前面提到,哈希表的本质就是一个数组,所以我们是可以用数组来实现哈希表的。这个遍历语句,速度更快,更好用。原创 2023-02-28 23:52:18 · 151 阅读 · 0 评论