- 博客(18)
- 收藏
- 关注
原创 回溯算法总结(1)组合问题
假如我们对数组排序 1,1,2,5,6,7,10。那么我们在回溯去找其他答案的时候,第二个1就不能用了,它一定会得到和第一个1开头时相同的答案。可以看出这个题的不同在与遍历的数组中,数字是可以重复选取的。举一个例子,n = 4,k = 4的话,那么第一层for循环的时候,从元素2开始的遍历都没有意义了。如2->“abc”.在前两道题时候,我们都是处理同一个集合的组合,这道题我们处理的不同集合的组合。因为回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度就构成了树的深度。
2024-06-18 21:32:50 1027
原创 leetcode 树的合集(二)
树的合集(二)->求二叉树的属性对称二叉树对称二叉树思路首先要清楚什么是对称二叉树:以根节点为轴,右子树翻转可以和左子树重合。那我们怎么判断一课树是对称二叉树?我们肯定要做两个节点的比较,但是绝对不是比较左右节点。我们要比较的是两个树—>根节点的左右子树。那么我们在递归遍历的时候,要同时的遍历两棵树。比较这两棵树最外侧的节点是否相同,比较这两颗树最内侧的点是否相同,这样才能保证翻转后重合。在这里采用递归的方式,要用后序遍历。从树的最底下的节点开始向上比较。代码 p
2024-06-03 12:42:54 937
原创 代码随想录训练营第10-12天 栈和队列
那么单调队列中,我们每次插入元素的时候需要和前面的元素比,如果小于,就直接进去。定义一个大小为k的大顶堆,在每次移动更新大顶堆的时候,每次弹出都把最大的元素弹出去了,那么怎么保留下来前K个高频元素呢。如果能配对,那么我们pop出栈顶的元素。当我们pop操作的时候,outStack栈不为空就继续输出这里的元素,否则9我们需要把inStack中所有的元素都清空,然后放到outStack栈中。因此栈中的栈顶元素永远记录着结果的最后一个字符,我们需要将新遍历的字符和栈顶的元素比较,如果相同那么栈顶元素出栈。
2024-05-22 19:57:37 897 1
原创 代码随想录训练营第7天 哈希表Ⅱ
这题和四数之和Ⅱ有很大区别,Ⅱ是在四个数组里,但是这个是在一个数组里,这个和三数之和是类似的。但是思路和流程和三数之和是一样的。把前两个数组中的和计算出来,然后放在map中,key是和的值。value是这个和出现的次数。然后再遍历ransomNote中的每个字符,看这个字符magazine出没出现过,如果出现过,那就把value-1;也是用哈希表的一道题,我们需要用到map来计算magazine中每个字符出现的个数。key是字符,value是出现的个数。如果后面两个数组的和和前面的和相加等于0。
2024-05-10 14:09:33 276
原创 代码随想录训练营第6天
判断两个数组有没有交集,想到就是是遍历数组 nums1,对于其中的每个元素,遍历数组 nums2 判断该元素是否在数组 nums2 中,如果存在,则将该元素添加到返回值。然后在遍历nums2的过程中。如果nums2的元素已经在s1了,说明该数是两个集合的交集。那么我们想到可以用set来保存平方后的加合,如果遇到重复的那么就说明不是快乐数。t 是 s 的异位词相当于是说两个字符串中字符出现的种类和次数均相等。能快速的找到所需要的值和它的下标。不是快乐数的条件就是:平方加合的数会重复,会不断的循环。
2024-04-22 21:29:05 213 1
原创 代码随想录第4天--链表
一个走两步,一个走一步。等式的桥梁是慢指针步数*2=快指针步数。如果两个链表有公共的节点,那么从后面往前数,最后一个节点肯定是相同的,从后往前看,最后一个相同的节点肯定是第一个相交的节点,那从后往前我们发现不光节点相同,节点数也是一样的。快指针先走n步,两个指针再同时走,此时的慢指针指的位置就是要删除节点的前一个节点。现在的我们没办法从前遍历比较的关键点就是两个列表从首先从长度上就没法对齐。当确定指针指向另一个节点的时候,原本的指针链会断裂。长链表指针先走dst个单位,然后两个链表指针一起走。
2024-04-22 19:28:18 288 1
原创 代码随想录代码训练营第3天
要删除链表的元素,对于链表来说最重要的是找到它的前一个节点,然后把链表的指针指到后面的后面的那个节点上。链表最重要的我感觉是要清晰的判断指针的指向。链表这里还是要多练,明显感觉写的时候大脑宕机。那如果删除整个链表的第一个元素那么则需要有一个虚拟的头节点。想到是头插法,头插法刚好可以实现链表的反转。这个题比较综合,涉及了链表的一些常规操作。但是看题解掌握了双指针法。203.移除链表元素。
2024-04-19 17:50:09 192 1
原创 代码随想录训练营第二天
这四条边应该有同一的规则所以我们应该是先123 然后456 然后 789 最后10 11 12 也就是相当于是左闭右开。然后用快慢指针,快指针对应的值减去慢指针对应的值,大于target就是满足题意。通过这几道题加深了双指针的理解,能够更好的应用在题目当中。大的值放到数组的后面。首先初始的数组是从小到大排序的。负数的平方会大于正数的平方,这取决于绝对值的大小。后来想到前置和:[2,3,1,2,4,3] 的前置和数组就是[0,2,5,6,8,12,15]。j不断移动直到i到j区间的和>=target。
2024-04-19 14:22:43 915 1
原创 代码随想录算法训练营第一天
最初的我的停止条件写错了,写成 while(left<right) 如果只有一个元素的话。因为数组升序排布,第一反应就是双指针left和right。mid就是left和right区间中间的节点。也就是从头到尾的重新写,遇到不需要移除的数组写下来。需要移除的我就不写了。那么我很直接的想到-----原地改变这个数组。快指针遍历整体的数组。那么我在重写的时侯,就需要一个指针记录我写到哪里了。由于题目要求是原地操作,也就是不能创建新的数组。那整体就两个指针,也可以说是快慢指针。这里的i就是快指针,j就是慢指针。
2024-04-17 16:33:33 299
原创 GoogleNet v2
1.提出了BN层,缓解ICS带来的训练困难,可以用更大的学习率,加快模型收敛可以不用精心设计权值初始化可以不用dropout或较小的dropout2.借鉴了VGG,全面将5*5替换为两个3*3的卷积堆叠。
2023-02-14 17:30:46 426
原创 论文精读之--GoogLeNet
GoogLeNet是2014年Google团队提出的,其中L为大写,目的是为了致敬LeNet。论文的多处命名来自于电影盗梦空间。GoogLeNet主要的模型是Inception(中文翻译为盗梦空间)。论文题目为《Going deeper with convolutions》,来自于该图片:GoogLNet当年取得了ILSVRC 2014年分类冠军,检测冠军以及定位亚军。开启了多尺度,1*1卷积时代,以及衍生了GooLeNet v2 v3 v4系列。
2023-01-12 21:43:25 2005 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人