自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 猴痘病识别

在PyTorch的ImageFolder数据加载器中,根据数据集文件夹的组织结构,每个文件夹代表一个类别,class_to_idx字典将每个类别名称映射为一个数字索引。默认值为 0,表示在主进程中加载数据。5pin_memory(可选参数):如果设置为 True,则数据加载到 GPU 时会将数据存储在 CUDA 的锁页内存中,这可以加速数据传输到 GPU。1dataset(必需参数):这是你的数据集对象,通常是 torch.utils.data.Dataset 的子类,它包含了你的数据样本。

2024-05-23 11:29:59 1502

原创 Pytorch实现天气识别

参加k同学已经第三周了,比起最开始,已经开始入门了。在前期,一定要多动手敲代码。有些不理解的地方,写出代码之后其实就豁然开朗了,除前期多敲代码,会加深对基础模型的理解,后续更复杂的模型用到这个基础模型的时候,脑中就已经知道为什么用这个,怎么实现。不需要刻意去记住模型长什么样,主要理解其思想是什么。

2024-05-16 18:03:04 1718

原创 CIFAR10彩色图片识别

跟着K同学经过两周的学习,感觉算是稍微入门了深度学习。同时也能独立写出一些代码了,有一些基础其实还是不是很牢固,我看了b站的一些网课,补充了一下基础知识。CIFAR10这个更是十分经典,记得在学校时候老师就拿这个给我们举例,实例教学。在学习前期,一定有多动手敲代码,很多其实看不懂的地方敲出来就能豁然开朗。并且要理解思想,框架。

2024-05-09 23:34:56 1561

原创 Pytorch实现mnist手写数字识别

更具体地说,损失函数loss是由模型的所有权重w经过一系列运算得到的,若某个w的requires_grads为True,则w的所有上层参数(后面层的权重w)的.grad_fn属性中就保存了对应的运算,然后在使用。对于一般的CNN网络来说,都是由特征提取网络和分类网络构成,其中特征提取网络用于提取图片的特征,分类网络用于将图片进行分类。函数会遍历模型的所有参数,通过内置方法截断反向传播的梯度流,再将每个参数的梯度值设为0,即上一次的梯度记录被清空。,否则的话,有输入数据,即使不训练,它也会改变权值。

2024-05-02 17:13:29 919

原创 学习二叉树9 Leetcode112

【代码】学习二叉树9 Leetcode112。

2023-05-27 20:33:29 71

原创 学习二叉树8 Leetcode 513

本题使用层序遍历再合适不过了,比递归要好理解得多!只需要记录最后一行第一个节点的数值就可以了。

2023-05-27 19:04:15 33

原创 学习二叉树7 Leetcode404

当遇到左叶子节点的时候,记录数值,然后通过递归求取左子树左叶子之和,和 右子树左叶子之和,相加便是整个树的左叶子之和。判断一个树的左叶子节点之和,那么一定要传入树的根节点,递归函数的返回值为数值之和,所以为int。递归的遍历顺序为后序遍历(左右中),是因为要通过递归函数的返回值来累加求取左叶子数值之和。如果遍历到空节点,那么左叶子值一定是0。使用题目中给出的函数就可以了。确定递归函数的参数和返回值。

2023-05-26 16:33:04 30

原创 学习二叉树6 Leetcode110

分别求出其左右子树的高度,然后如果差值小于等于1,则返回当前二叉树的高度,否则返回-1,表示已经不是二叉平衡树了。如何判断以当前传入节点为根节点的二叉树是否是平衡二叉树呢?当然是其左子树高度和其右子树高度的差值。如果当前传入节点为根节点的二叉树已经不是二叉平衡树了,还返回高度的话就没有意义了。递归的过程中依然是遇到空节点了为终止,返回0,表示当前节点为根节点的树高度为0。所以如果已经不是二叉平衡树了,可以返回-1 来标记已经不符合平衡树的规则了。返回值:以当前传入节点为根节点的树的高度。

2023-05-26 15:03:37 29

原创 学习二叉树5 Leetcode222

【代码】学习二叉树5 Leetcode222。

2023-05-25 22:32:26 21

原创 学习二叉树4 Leetcode111

反之,右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。最后如果左右子树都不为空,返回左右子树深度最小值 + 1。那么使用后序遍历,其实求的是根节点到叶子节点的最小距离,就是求高度的过程,不过这个最小距离 也同样是最小深度。本题依然是前序遍历和后序遍历都可以,前序求的是深度,后序求的是高度。如果左子树为空,右子树不为空,说明最小深度是 1 + 右子树的深度。

2023-05-25 22:02:52 22

原创 学习二叉树3 Leetcode104

本题可以使用前序(中左右),也可以使用后序遍历(左右中),使用前序求的就是深度,使用后序求的是高度。,所以本题中我们通过后序求的根节点高度来求的二叉树最大深度。

2023-05-25 21:39:20 17

原创 学习二叉树2 Leetcode107

【代码】学习二叉树2 Leetcode107。

2023-05-24 20:05:23 20

原创 学习二叉树1 Leetcode 144 94 145

【代码】学习二叉树1 Leetcode 144 94 145。

2023-05-23 16:57:31 23

原创 学习栈与队列6 Leetcode239

此时我们需要一个队列,这个队列呢,放进去窗口里的元素,然后随着窗口的移动,队列也一进一出,每次移动之后,队列告诉我们里面的最大值是什么。每次窗口移动的时候,调用que.pop(滑动窗口中移除元素的数值),que.push(滑动窗口添加元素的数值),然后que.front()就返回我们要的最大值。对于窗口里的元素{2, 3, 5, 1 ,4},单调队列里只维护{5, 4} 就够了,保持单调队列里单调递减,此时队列出口元素就是窗口里最大元素。但如果把窗口里的元素都放进队列里,窗口移动的时候,队列需要弹出元素。

2023-05-23 16:10:50 24

原创 学习栈与队列5 Leetcode 150

但我们没有必要从二叉树的角度去解决这个问题,只要知道逆波兰表达式是用后序遍历的方式把二叉树序列化了,就可以了。在进一步看,本题中每一个子表达式要得出一个结果,然后拿这个结果再进行运算,那么。大家可以把运算符作为中间节点,按照后序遍历的规则画出一个二叉树。

2023-05-21 21:37:50 28

原创 学习栈与队列4 Leetcode 1047

我们在删除相邻重复项的时候,其实就是要知道当前遍历的这个元素,我们在前一位是不是遍历过一样数值的元素,那么如何记录前面遍历过的元素呢?所以就是用栈来存放,那么栈的目的,就是存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素。来说其实也是匹配问题,20. 有效的括号 是匹配左右括号,本题是匹配相邻元素,最后都是做消除的操作。本题要删除相邻相同元素,相对于。本题也是用栈来解决的经典题目。

2023-05-21 21:18:11 18

原创 学习栈与队列3 Leetcode 20

第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号return false。第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false。那么什么时候说明左括号和右括号全都匹配了呢,就是字符串遍历完之后,栈是空的,就说明全都匹配了。第二种情况,括号没有多余,但是 括号的类型没有匹配上。第一种情况,字符串里左方向的括号多余了 ,所以不匹配。第三种情况,字符串里右方向的括号多余了,所以不匹配.

2023-05-21 20:44:13 22

原创 学习栈和队列2 Leetcode225

其实这道题目就是用一个队列就够了。

2023-05-19 14:31:14 26

原创 学习栈与队列1 Leetcode232

使用栈来模式队列的行为,如果仅仅用一个栈,是一定不行的,所以需要两个栈。,再从出栈弹出数据,如果输出栈不为空,则直接从出栈弹出数据就可以了。在push数据的时候,只要数据放进输入栈就好,,这里要注意输入栈和输出栈的关系。最后如何判断队列为空呢?

2023-05-19 14:04:42 24

原创 学习字符串4 Leetcode剑指offer58

最后就可以达到左旋n的目的,而不用定义新的字符串,完全在本串上操作。

2023-05-17 16:02:36 20

原创 学习字符串3 Leetcode151

使用双指针法来去移除空格,最后resize(重新设置)一下字符串的大小,就可以做到O(n)的时间复杂度。举个例子,源字符串为:"the sky is blue "这样我们就完成了翻转字符串里的单词。

2023-05-17 15:47:58 24

原创 学习字符串2 Leetcode541

其实在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k 就可以了,然后判断是否需要有反转的区间。一些同学可能为了处理逻辑:每隔2k个字符的前k的字符,写了一堆逻辑代码或者再搞一个计数器,来统计2k,再统计前k个字符。因为要找的也就是每2 * k 区间的起点,这样写,程序会高效很多。这道题目其实也是模拟,实现题目中规定的反转规则就可以了。

2023-05-17 14:48:31 19

原创 学习字符串1 Leetcode344

因为字符串也是一种数组,所以元素在内存中是连续分布,这就决定了反转链表和反转字符串方式上还是有所差异的。对于字符串,我们定义两个指针(也可以说是索引下标),一个从字符串前面,一个从字符串后面,两个指针同时向中间移动,并交换元素。反转字符串依然是使用双指针的方法,只不过对于字符串的反转,其实要比链表简单一些。

2023-05-17 14:16:29 21

原创 双指针 Leetcode15

接下来如何移动left 和right呢, 如果nums[i] + nums[left] + nums[right] > 0 就说明 此时三数之和大了,因为数组是排序后了,所以right下标就应该向左移动,这样才能让三数之和小一些。如果 nums[i] + nums[left] + nums[right] < 0 说明 此时 三数之和小了,left 就向右移动,才能让三数之和大一些,直到left与right相遇为止。

2023-05-16 16:22:47 22

原创 学习哈希表5 Leetcode454

【代码】学习哈希表5 Leecode454。

2023-05-16 15:42:18 16

原创 学习哈希表4 Leetcode1

因为本地,我们不仅要知道元素有没有遍历过,还有知道这个元素对应的下标,首先 最简单的应该是暴力求解。其次我们还可以想到哈希表。

2023-05-15 16:21:03 10

原创 学习哈希表3 Leetcode202

用哈希表来标记寻找快乐数的过程中出现的数,如果有的数重复出现则表示已经进入死循环。

2023-05-15 15:56:23 12

原创 学习哈希表2 Leetcode349

首先我们可以将nums1存入哈希表中,之后将num2与哈希表进行匹配,如果有重复数字,就将重复数字存入我们的result数组中,不要忘记,要将哈希表里的重复数字置0,这样只会输出一次。

2023-05-15 15:37:19 10

原创 学习哈希表1 Leetcode242

再遍历 字符串s的时候,只需要将 s[i] - ‘a’ 所在的元素做+1 操作即可,并不需要记住字符a的ASCII,只要求出一个相对数值就可以了。这样就将字符串s中字符出现的次数,统计出来了。需要把字符映射到数组也就是哈希表的索引下标上,因为字符a到字符z的ASCII是26个连续的数值,所以字符a映射为下标0,相应的字符z映射为下标25。那看一下如何检查字符串t中是否出现了这些字符,同样在遍历字符串t的时候,对t中出现的字符映射哈希表索引上的数值再做-1的操作。

2023-05-15 14:39:58 14

原创 链表学习6 Leetcode142

第二 在相遇出插入新指针index1,重新定义一个指针index2,同时走,相遇处则为环的入口。首先 定义两个指针,快指针,慢指针,如果相遇则有环。

2023-05-13 19:02:05 21

原创 学习链表5 Leetcode面试题02.07

这道题的思想就是先要让两个指针移动到两个链表后面的元素数量相同,所以要先计算链表长度,计算链表的长度差,然后让curA移动到,和curB 末尾对齐的位置,此时我们就可以比较curA和curB是否相同,如果不相同,同时向后移动curA和curB,如果遇到curA == curB,则找到交点。否则循环退出返回空指针。

2023-05-13 18:22:17 18

原创 学习链表4 Leetcode19

如果要删除倒数第n个节点,让fast移动n步,然后让fast和slow同时移动,直到fast指向链表末尾。删掉slow所指向的节点就可以了。fast首先走n + 1步 ,为什么是n+1呢,因为只有这样同时移动的时候slow才能指向删除节点的上一个节点(方便做删除操作),之后fast和slow同时移动,直到fast指向末尾, 删除slow指向的下一个节点。这个题看到之后 首先想到双指针。

2023-05-13 17:58:55 11

原创 学习链表3 Leetcode206

其实这个题也是用到双指针的,首先定义一个cur指针,指向头结点,再定义一个pre指针,初始化为null。然后就要开始反转了,首先要把 cur->next 节点用tmp指针保存一下,也就是保存一下这个节点。为什么要保存一下这个节点呢,因为接下来要改变 cur->next 的指向了,将cur->next 指向pre ,此时已经反转了第一个节点了。最后,cur 指针已经指向了null,循环结束,链表也反转完毕了。此时我们return pre指针就可以了,pre指针就指向了新的头结点。

2023-05-12 18:05:10 11

原创 学习链表2 Leetcode707

包含了基本上较全的链表操作。

2023-05-12 17:31:22 26

原创 学习链表1 Leetcode203

这种一般有两种方法,第一种就是先判断头节点,之后判断除了头节点以外其他节点。第二种就是构造一个虚拟头节点。

2023-05-12 17:18:00 10

原创 学习数组4 Leetcode59

而求解本题依然是要坚持循环不变量原则。由外向内一圈一圈这么画下去。

2023-05-12 16:28:55 13

原创 学习数组4 Leetcode209

这道题呢可以用一个滑动窗口来解决,其实滑动窗口也就是双指针,所谓滑动窗口,

2023-05-12 15:57:12 37 1

原创 学习数组3 Leetcode977

这个题首先第一眼想到的应该是暴力解法,先全平方再排序,但是还有一种双指针思路,因为平方后最大的肯定在第一位和最后一位,可以定义两个指针,一个指在首位,一个在末尾,判断平方后的大小关系。

2023-05-12 15:28:27 34 1

原创 学习数组2 移除数组元素 Leetcode27 26 283

给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。思路:很直接的双指针法,可以直接套用模板,最后的slow刚好为新数组的下一个,所以直接返回slow数值,即数组长度,不需要+1。右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移。因此每次交换,都是将左指针的零与右指针的非零数交换,且非零数的相对顺序并未改变。要知道数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。

2023-05-10 17:34:26 53

原创 学习数组1 二分查找 Leetcode704 35 34 69 367

其中leecode题目在这。其实这个也是用到二分查找,但是与常规的不用是如果目标值不存在,需要找出相应的位置,可以理解为与目标值最接近,但是比他大的那个元素的位置,所以如果查找失败,则说明数组中没有目标值,那么right所在位置的下一个位置是与目标值最为接近且比他大的位置。这个题其实答案有三种方法,第一种比较讨巧,第三种是数学的牛顿迭代法,我认为第二种二分查找是最为中规中矩也是实用的方法,首先为了防止溢出,可以先将right设置为x/2,再利用二分查找来找出x的算术平方根或者最为接近x的整数。

2023-05-10 16:45:28 45 2

空空如也

空空如也

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

TA关注的人

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