自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 41.哀家要长脑子了!

只要不满足题目中的条件的时候就弹出栈顶元素 (tt--)保证这个栈中的一个单调性。

2024-07-17 22:58:24 123

原创 39.哀家要长脑子了!

我脑袋好晕 我先撒个尿标记一下。

2024-07-16 21:25:44 96

原创 39.哀家要长脑子了!--用数组模拟指针的单链表与双链表

【代码】39.哀家要长脑子了!--用数组模拟指针的单链表与双链表。

2024-07-15 22:32:15 107

原创 38.哀家要长脑子了!--离散化

4.移动重复元素:当发现两个相邻的元素相等,会将后面的重复元素向序列的末尾移动,覆 盖到它遇到的第一个重复元素(也就是不重复序列的最后一个元素的后一位)3.比较相邻元素:从序列的起始位置开始,将每个元素与其紧邻的前一个元素进行比较。1.arr.erase(m):就是把 arr中第m+1个数字开始的,到结尾全部删除(包括m+1),而是通过移动操作将重复的元素移 动到序列的某个末端位置,并。所以就需要用到离散化,使用一个新容器alls,这个里面的元素就是原来数组的下标。

2024-07-14 21:00:56 379

原创 37.哀家要长脑子了!--层序遍历

获取队头结点node,将队头结点出队,将node的值放入数组storey中,然后把node的左右孩子先后加入队列中,结束队列循环的大小后就把所新建的数组storey放到返回的结果数组中。我又想在这个基础上结点的右结点为空左结点不为空时才把这个结点入队。不知道自己的脑子用什么做的。要弄清楚数据结构,每个结点有两部分,一个是结点的元素值val,一个是Node结点数组children,children里面存储的也就是该结点的孩子,我们要遍历每个结点的孩子,就要把这么多的孩子在操作这个结点的时候,把孩子们入队。

2024-07-12 18:05:08 772

原创 36.哀家要长脑子了!--前缀和&差分

想象差分数组中的每个元素代表了一段“坡度”,前缀和则是沿着这些坡度从起点走到当前位置的累积高度变化。差分数组用来间接表示这个序列,当对原数组的区间进行修改时,只需要对差分数组的起始、结尾位置分别进行一次修改就好。s[i] = a[1] + a[2] + a[3] + ... + a[i] 即。差分数组中的元素就是这个元素跟它的前一个元素的差值,比如。可以直观的看到对差分数组进行前缀和操作就可以得到原数组。差分数组:[1, 1, 0, -1, 1, 1]原数组:[1, 2, 2, 1, 2, 1]

2024-07-08 22:07:50 249

原创 36.哀家要长脑子了!--高精度的+-*/

思路:把大数的每一位数当作数组的元素存入到数组中。倒序存储也是说,个位放在下标为0 的位置,然后每一位两两操作,做好进位的工作。因为除法是先从高位运算的,为了与高精度的加减乘统一,所以最后得到的商数组倒序反转一下。

2024-07-06 20:09:49 162

原创 35.哀家要长脑子了!--二分

模板1计算mid没有偏移。此时如果check(mid)为真,说明mid位置的元素满足条件,我们不希望直接返回,我们希望找到最左边的。因此,我们将右边界r更新为mid,即缩小搜索区间到[l, mid],继续在左侧寻找。模板2计算mid在偶数长度区间没有影响,在奇数长度区间,向右偏移。即使当mid位置的元素满足条件,我们也不会立刻排除其右侧可能存在的更多满足条件的元素,通过将l更新为mid,我们保留了右侧的搜索空间,直到最终确定最右侧的满足条件元素。

2024-07-06 19:19:03 234

原创 34.哀家要长脑子了!--归并排序

当i > j 并且 q[i] < q[j]的时候,因为这两部分都是有序数组。那么对于q[j]这个点,q[i]以后所有的数都可以跟q[j]构成逆序数对,所以针对q[j]这个数字可以构成的逆序数对有 res = mid - i + 1 个,让然后左右两边都这么递归计算就好。注意题目的范围是100000,当最差的情况是这个数组是逆序的,等差数列求和算一下逆序对数量会超过INT_MAX。首先看题目,知道什么是逆序数对。可以一边归并排序一边计算有序数对。tmp数组用来存放有序的部分。② 递归排序 左边右边。

2024-07-05 10:22:40 312

原创 33.哀家要长脑子了!

憋说了,感觉好不容易长出来的脑子又缩回去了。。。

2024-07-03 12:06:49 769

原创 32.哀家要长脑子了!

抓本质抓本质,有多少位非公牛数可以通过重新排列转换公牛数字,意思就是,当这个数不是公牛数字时,我们就分别统计它在secret和guess中的数量,然后取数量较少的作为奶牛数就好,因为它是可以调整位置的使它变成公牛数,多余的无法匹配再怎么调整位置也没办法把它变成公牛数。发现我跟人家想法不一样的是:我没有复制数组,先记录排序前原来的位置,然后在制造答案数组的时候遍历排序后的数组,根据记录的原来的位置放答案。首先自己瞎掰扯了半天 感觉有点冗余 三元运算符还是见样学样的哈哈。公牛还是挺好数的,奶牛。

2024-07-01 22:27:58 320

原创 31.哀家要长脑子了!

>statement捕获列表 参数列表 可变规格异常说明 返回类型 函数体捕获列表:在C++规范中也称为Lambda导入器,捕获列表总是初夏在Lambda函数的开始处。实际上,[ ]是Lambda引出符。编译器根据该引出符判断接下来的代码是否是Lambda函数,捕获列表能够捕捉上下文中的变量以供Lambda函数使用。

2024-06-11 20:54:40 585

原创 层次聚类分析星

例如,如果T = [1, 2, 1, 3, 1, ...],这表示第一行和第三行的数据点被分到了第一类(簇1),第二行数据点分到了第二类(簇2),第四行数据点分到了第三类(簇3),依此类推。: 可选参数,指定树状图的方向,可以是'top'(默认),树状图朝上生长)、'bottom'(朝下生长)、'left' 或' right'。:矩阵的每一行对应于聚类过程中的一步,即一次具体的合并操作。是一个 包含聚类树信息的(m-1) x 3的矩阵,其中m是输入数据点的数量,每一行代表一个聚类步骤。

2024-06-09 11:33:52 739

原创 KMeans聚类分析星

综上所述,这行代码的完整意义是:对于数据点X中的第i个点,计算它与聚类中心centroids中第j个中心的每个特征值的差值,然后将这些差值各自平方,最后将这些平方差值相加起来可以得到距离的平方和,存储在distances(j)中。这意味着,对于每个数据点,它会找到距离最近的聚类中心的索引,并记录下来,以便后续分配该数据点到相应的聚类中。聚类分配:调用findClosestCentroids函数,该函数计算每个样本点距离所有聚类中心的距离,并为每个样本分配最近的聚类中心的索引,将结果存入idx。

2024-06-08 22:06:45 733

原创 派派派森03

def 方法名(self, 形参1, ..., 形参N):方法体self关键字市成员方法定义的时候,必须填写的它用来表示类对象自身的意思当我们使用类对象调用方法的是,self会自动被python传入在方法内部,想要访问类的成员变量,必须使用self传参的时候可以忽略self。

2024-06-05 13:12:44 693

原创 派派派森02

_main__变量if__main__ == "__main__"表示,只有当程序时直接执行的才会进入if内部,如果时被导入的,则无法进入__all__变量如果一个模块文件中有这个变量,当使用`from xxx import *`导入时,只能导入这个列表中的元素。

2024-06-03 22:56:20 671

原创 派派派森01

None类型:表示空的 无意义的 无返回值的函数实际上就是返回了None这个字面量。如,range(5, 10)取得的数据是:[5, 6, 7, 8, 9]获得一个从num1开始,到num2结束的数字序列(不含num2本身)获取一个从num1开始,到num2结束的数字序列(不含num2本身)如,range(5, 10 2)取得的数据是:[5, 7, 9]如range(5)取得的数据是:[0, 1, 2, 3, 4]获取一个从0开始,到num结束的数字序列(不含num本身)条件满足时,做的事情2。

2024-06-03 10:05:01 286

原创 30.哀家要长脑子了!---栈与队列

怎么正确计算呢,话接上文,曾经遍历过深度更大的目录或文件,说明此时所遍历的文件或者是此时所在的目录发生了路径跳转,不是那个深度更大的目录或是文件了,栈中包含的不必要的更深层的长度信息,但是我们要计算的是此时所在文件或是目录的路径长度。用一个栈来保存所遍历过最大的文件的绝对路径的长度,栈顶元素是文件的长度,栈中元素的个数是该文件目录的深度,非栈顶元素就是当时目录的长度。再来判断文件的长度,遇到 “\n”,就代表文件遍历完了,要换一层目录,遇到pos > n说明遍历完辣。

2024-05-27 23:03:58 384

原创 29.哀家要长脑子了!

这里的flag更可以看作一个乘法因子,+操作就是使这个数是一个正数,-操作就是使这个数变为一个负数。● 用一个变量pre记录上一个字符,在遇到新的数字的时候,根据这个字符来确定怎么处理 当前数字num与上一个数字(栈顶元素。遇到 "(" 就将 flag = 1入栈,代表有一个操作要进行,默认操作为+,因为后面遇到 - 还会重新赋值。这个栈不是用来存放数的,而是用来存放操作符号的。最后就是累加栈中的数字辣,可以类比一下上一题都是通过这个数字的符号来代表它们的加减操作。

2024-05-27 10:42:08 574

原创 28.哀家要长脑子了!

前几天拖着没写的题解和今天写的。

2024-05-15 23:10:29 273

原创 27.哀家要长脑子了!

哎哟 烦死了 刚刚不小心退出又没保存 又要写一遍烦死了 最近刷题不得劲啊 感觉这脑子没长一点。

2024-05-15 21:06:37 270

原创 26.哀家要长脑子了!---单调栈

这意味着从索引st.top()代表的那一天开始,直到现在的索引i,我们首次遇到了一个更高的温度,因此,我们可以确定在st.top()这一天之后的i - st.top()天,有一个更高的温度出现。当此时的栈不为空,并且此时遍历的温度大于栈顶的温度(即栈中最大的温度)循环以下操作:将当前的温度下标减去栈顶元素的下标,然后栈顶元素的下标就是此时所计算的那一天。如果栈不为空并且,此时遍历的数字大于栈顶中的数字,我们就可以把栈中比此时数字小的数字弹出,因为我们要找的是下一个比它大的数字,比他小的肯定不行啊。

2024-05-11 22:34:49 272

原创 25.哀家要长脑子了---哈希表

用一个counter来记录nums中0、1数量差值的变化。哈希表map存储某个特定的counter值首次出现的位置。counter的计算:出现1就加1,出现0就减1。第二次出现同样的counter值意味着从第一次出现的counter位置到第二次出现的counter位置中间出现的0和1的次数一样了 才会导致同样的counter值出现第二次。为什么map[0] = - 1 而不是map[0] = 0呢,我理解的还不是很清白。是为了第一个位置开始就平衡的情况。在我对通义千问的一番折磨下,终于弄清楚一点点了。

2024-05-06 22:32:20 164

原创 24.哀家要长脑子了!---哈希表

哈希表cnt中记录的是,在不同水平位置上的累计砖块宽度值出现的次数。这里的”累计砖块宽度值“指的是从墙最左边开始到某个点为止,所有砖块宽度的和 (但不包括最后一块砖的宽度,因为我们关心的是缝隙的位置),就是找缝隙。代表它出现的次数少一次了。然后判断一下左边的是不是比右边的小,如果是的话就把左边这个数字变为负的,嗯,就是酱紫,为什么你不会做。以上图中的样例为准,一行一行遍历得出的map就是这样子的 意思就是,第1块砖后面有缝隙的有3行,第3块砖后面有缝隙的有2行,第5块砖后面有缝隙的有2行,以此类推....

2024-05-04 11:53:08 271

原创 23.哀家要长脑子了!

for循环遍历关规律pattern中的每个字母,如果进入循环后,发现单词的起点已经大于s的长度,说明字符串s中的每个单词已经遍历完毕,但是pattern还没有遍历完毕(因为进入了for循环)说明s的长度大于pattern,out。因为k是题目要求的差值的绝对值。

2024-05-04 10:20:55 836

原创 22.哀家要长脑子了!

为什么要这样呢,因为这样可以区分这个这个键值是否被设置过,如果是0就是没有被设置过的,如果不是0就说明是设置过的有元素的。比如:get方法查询一个键时,由于返回的是map[key]-1,对于已经被删除的键(值为0)会得到0 - 1 = -1,这可以作为一个标志,表明该键不存在或者已经被删除。当链表长度为偶数是:fast指向链表最后一个结点的下一个结点,即fast为空,slow指向中间两个结点的第二个结点。如果不+1,那么存储0的时候就无法判断是设置过的还是没被设置过的,-1是因为存储的时候+1了要还原。

2024-05-01 23:06:43 340

原创 21.哀家要长脑子了!

要按升序连接,以链表2头结点作为开端,哪个小就先连接哪个,然后把此时操作的链表的指针往后移,同时遍历新链表的指针也要往后移。我做过啊,为什么还是不能独立做出来,为什么为什么啊啊啊 嘻嘻奔向五一。

2024-04-30 22:31:16 104

原创 20.哀家要长脑子了!

其实我每次首先都搞不懂这种循环取模操作 循环队列 上次那个旋转数组 还有蓝桥云课里面的题。是不是要时时回过头想一想看一看,还是我没有彻底搞懂,囫囵吞枣,一知半解,似懂非懂。这个题我也觉得挺有意思的,还有种很熟悉的感觉,似曾相识,但是我又说不出。这个我觉得巧妙的点是:add = n - k % n 找断开的位置。以前做过旋转数组,但是。你忘得干干净净小姐姐。抱一丝哈抱一丝 我就是直接先两个链表反转 求出结果后在反转的。我发现做过的题,老是不记得,就像这个反转链表。最关键的是这个carry!

2024-04-29 23:25:48 203

原创 19.哀家要长脑子了!

而赎金信需要判断的字符串ransomNote能不能由magzine里的字符构成,也就是说,在ransomNote中出现的字符,一定要在magzine中出现。于是就有两个要注意的点,第一个是要先遍历magzine,而不是ransomNote,第二个就是不能单纯的直接判断字母是否出现过,而是要判断ransomNote里的字母是否在magzine里面出现过。基于相同的元素不要有相同的三元组解。这道题目很像,但是有不一样,有效字母只是单纯的计算字符串s中的字母出现的次数是不是跟字符串t中的字母出现的次数相同。

2024-04-29 09:24:47 127

原创 18.哀家要长脑子了!

使用标记数组的话,先遍历一边nums1数组,把num1数组中有的元素标记为1,再遍历一遍nums2数组,nums2数组的元素作为flag数组的下标,如果此时元素值不为0,说明该元素(下标)在nums1中出现,可不就是交集吗。用一个flag数组,s出现的 加!这样s和t中每个字符出现的次数相同的话,就会加多少减多少,flag数组的元素值都会是0。使用set的话,先把nums1数组中不同的的元素放到set里面,再遍历一遍nums2。// 如果在s中没有找到num就会返回set中最后一个元素(end迭代器)

2024-04-28 22:17:22 233

原创 17.哀家要长脑子了!

双指针移动的巧妙在于好像把他们两个放在了一个环里面,谁先到了就让他从另一个链表开始,然后,去追逐刚刚那个走的慢的,他们总会在相交点相遇,说实话还不是很理解。每次写的代码倒是看得懂就是自己写的时候,老是搞不清楚这种迭代遍历交换的顺序和到底什么是时候跳出循环。分别设置pa、pb指针遍历链表a和链表b,如果两个链表不相交,那么到最后都会遍历到末尾变成空指针。要交换那就交换咯 用一个空的虚拟头结点,通过这个头结点来控制后一个结点,后后一个结点。妙啊妙啊 怎么想到的 为什么我没想到。哎哟我去有点晕啊有点晕。

2024-04-23 23:13:05 221

原创 16.哀家要长脑子了!

看不太懂题,后面看题解发现,题目中给出这个哪个结点就删除哪个结点,不会给出整个链表,那你直接对这个结点操作就好。i++) 或 for(int i = 0;下次想到办法就先自己动手试试,不管会不会,先试试,再去看题解,像这个你自己的思路就是对的,要自信呀。这我都懂,但是,一让我动手写代码我就不会了TAT TAT TAT TAT TAT TAT。用一个空结点当头结点呀~~ 这样子如果需要删除的是头结点的话,就不需要进行额外操作了。单链表要删除结点,但是又不知道是正数第几个,没办法咯,只能先求出链表长度。

2024-04-22 20:51:34 264

原创 15.哀家要长脑子了!

旋转图像就是行列转置,经过以对角线为轴的变换之后,行元素已经变成了列元素,但是我们会发现还没有达到顺时针旋转90度的效果,是因为这是逆序的,所以还需要将元素从左到右边进行反转。在b站学的那个方法太繁琐了还要额外判断第一行第一列,但是很好的帮助我去理解二维前缀和。aaaaaaaaaa 我发现我还是没有真正搞懂这个二维前缀和 我只能先死记一下。旋转90度,先以对角线为轴进行交换,再以中间轴(中垂对角线)左右交换。哎哟 我去 我感觉就是考对代码掌握的熟练程度 我。先遍历矩阵,遇到0的就把那一行那一列做个标记。

2024-04-21 23:42:11 268

原创 14.哀家要长脑子了!

当遇到X的时候,就把X变成. 然后把X身边的X也变成. 怎么变,垂直方向:从它的右边开始(k=i+1)遍历到矩阵边界,我说为什么不从左边,因为它是一遇到X就开始这种操作,那么一遇到的肯定就是最左边。这个是垂直方向的判断,意思就是:当这个位置是X并且旁边有地方可以判断时,就判断一下,如果它上面是X说明这个军舰是上一艘军舰的延续部分,已经被计算过了不用再计算,跳过。大于n时,对角线的起点是从最后一行的某一列开始,起点横坐标:m-1 纵坐标:i-m+1。将一个m x n的矩阵变成 r x c的。

2024-04-21 13:55:51 1147

原创 13.哀家要长脑子了!

第二个for循环 是通过对数组元素值打标记(添加负号),待会来判断数组下标是否出现过,如果num在有效范围内,则尝试访问num代表的那个正整数在理想状态下应该所在的数组位置。官方题解是把数组元素插入到set集合时,只要大于3就把前面的元素移除出集合,最后留在set集合里面的就是剩下最大的三个元素了咯 最后返回的时候,如果set集合长度大于3就输出第一个元素(三个里面最小的,第三大),小于三就输出最大的元素即最后一个。排序后:每个位置的元素等于其下标加1,如果不是的说明是重复的元素。

2024-04-17 20:28:40 263

原创 12.哀家要长脑子了!---数组

让每个元素都加上数组的大小是因为这样所有出现的元素都会大于数组的长度,如果在后期遍历时,发现某个数组数值小于等于数组长度,那么它的初始值是0,他一定没出现过,它就是那个消失的数字!那么这个元素本身可能是在数组里的,题目要求求与原数组度相同的最短的子数组,那么就让第一次出现的位置与最后一次出现的位置得到距离最小就好。是因为这个元素值是从1开始,数组下标从0开始,还要判断是不是最后一个元素重复的,我老是搞不清,我是真的不清白啊。把k个元素旋转放到前面,前面n-k个元素是向后移动的。哎哟,感觉这些题目好奇妙啊。

2024-04-16 22:10:32 406

原创 1.老师我太想进步了——些些芝士点

这里,sprintf函数的作用是将整数h和m格式化为一个符合时间个格式("HH:MM")的字符串,并将结果存储在字符数组ans中。用于将格式化的数据写入字符串中。

2024-04-15 22:38:14 182

原创 11.哀家要长脑子了!---数组

1.2.3.4.5.

2024-04-15 22:14:34 893

原创 10.哀家要长脑子了!-代码随想录day01

如果左指针平方后的元素小于右指针平方后的元素,就先把左指针平方后的元素放入结果集,然后左指针向右移动;如果右指针平方后的元素小于左指针,就先把右指针平方后的元素放入结果集,然后右指针向左移动;但是如果此时将左指针前移动,左指针指向的值不是val,右指针指向的值不是val,此时循环又将左指针往后移了,但是右指针的值不是val;因为不能开辟新的空间,所以考虑用双指针,左指针的值等于val就跟右指针交换放到右边去,然后再把左指针往前移一位,右指针向前移动一位,继续寻找指向不等于val的元素。

2024-04-14 22:37:38 708

原创 9. 哀家要长脑子了!

从第一层的第一个结点开始搜索,如果这个结点的元素值是空的,说明这个结点没有子结点,这个结点是叶子结点,需要累加能量果了。一边输入一边构造标记数组,是S—马的起始位置,走过了不能走,标记为1;我觉得这道题深度搜索体现在:对于每个点都进行入队出队操作,它的下一个点也是同样的操作,并且它的下一个点有八个选择,每个选择都需要进行这样的 操作和判断。{-2, 1}, {-1, 2}, {1, 2}, {2, 1}, {2, -1}, {1, -2}, {-1, -2}, {-2, -1} 酱紫的。

2024-04-10 17:40:29 507

空空如也

空空如也

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

TA关注的人

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