- 博客(24)
- 收藏
- 关注
原创 可以在M1的pd上安装的centos7虚拟机
centos官网上下载的arm64的centos7虚拟机没法直接在M1上用,选择开始安装会无限循环,网上查了好像说是默认分页大小的问题,给个能在M1上成功安装的。用的时候把CentOS-7-aarch64-08191738.iso.mpg后面的.mpg删除。
2024-06-28 10:36:34
148
原创 最长连续序列
暴力循环每个元素,看从这个元素开始,最长能到多少,比如从第i个元素x开始,一直到x+y都有,那么最长的长度就是y+1。这种思路对每个循环的元素都要遍历一边数组,但遍历的目的只是找到有没有而已,所以可以直接用无序哈希表,查找速度很快,最终复杂度n2。同时简化操作,假如说判断出x到x+y是连续的,那么中间的所有数都可以直接跳过,包括x+y,也就是说,假如在判断x的时候,哈希表存在x-1这个数,那x就直接不判断了。个人思路:排序,然后。
2024-04-30 16:38:11
86
原创 梯度下降和反向转播
训练过程一般会先随机取一个点,还会设置一个学习率,代码中命名为lr,每次判断导数值之后,肯定要再取一个点,那么这个点就是以导数值乘以lr的结果作为步长迈出来的,也就是说,随着导数值下降,你的步长也会变小,这也是为什么收敛的速度会越来越慢的原因。损失函数这里用差的平方和,当然实际应用中会有不同的选择,训练要做的就是找到一组k,b,让损失函数的值最小。个人理解就是越前面的参数,和后面的参数关系就越大,有时候可能可能求出的偏导函数中会有靠近输出层的参数,所以要从输出层往输入层一层层优化,所以就是反向。
2024-03-23 22:18:23
148
原创 双指针专题
思路:经典题目,可以暴力但时间复杂度O(n**2),也可以一层枚举+二分查找,复杂度O(nlogn),最快双指针,可以充分利用数组非递减,一头一尾两个指针,计算和,小了左边的右移,大了右边的左移。为什么谁小谁移动可以得出解呢,因为如果小的固定,那么另外一个无论怎么移动,水都不会更多了,所以要移动小的,看看有没有大一点的,能抬高杯壁上限。思路:一层枚举+双指针,需要先排序,主要点在于判断边界条件,由于要求不能重复, 因此指针移动时要看看值是不是一样,一样需要跳过。5. 盛水最多的容器。
2024-03-19 22:21:55
225
原创 找出字符串中第一个匹配项
C:官方题解代码,按理说应该需要保存前缀函数值,但python这套运行逻辑放在C上就无法运行,蛮奇怪的。感觉写出来的代码怪怪的,虽然能通过,但是比题解少很多。个人思路:用KMP算法,从跳过每次匹配成功的部分。
2024-03-18 21:31:12
387
原创 反转字符串中的单词
个人思路:直接采用split,reversed,join函数就行,高级语言一般都有这种函数。不过也要学习一下常规的思路,双端队列插入,挨个找出字符串压入队列,在转换成字符串。
2024-03-17 21:56:53
356
1
原创 最长公共前缀
个人思路:既然是公共的,那就说明每个字符串里都有,因此每取一个字母,判断一下所有字符串里有没有就行,当然取得字母最好是最短字符串里面的。字符串语法不太熟悉,最终还是看了题解。这两天笔试,刷题时间少了。
2024-03-16 22:06:42
350
1
原创 135.分发糖果
个人思路:原本想用滑动窗口,维持长度为3的窗口挨个判断,但代码没写出来,似乎这个思路不对,因此改用左右两次遍历,左遍历的时候维护一个数组,把0处元素置1,其余根据大小判断加还是也为1,然后再右遍历,可以再维护一个数组记录右遍历情况,最后挑左右数组里面大的数相加(也可以算出右的时候直接判断,会快很多)
2024-03-14 21:19:57
343
1
原创 42.接雨水
思路:看过英雄哥的解题思路,知道要用前缀和后缀最值,定义俩数组,数组每个元素代表到当前这个元素为止,往左或往右最大的值,判断能接多少水的时候忽略两头。
2024-03-13 21:43:20
361
原创 134.加油站
遇到困难:想判断的是最后的落点 j 能否循环到 i ,但是这样对于10**6长度的数组会超时,看了题解思路,想到应该判断走过的路程是否为gasSize。个人思路:能想到类似滑动窗口,对于每个元素i,判断最远能到哪里,如果中途汽油为负,则从负的这个点的下一个地方开始重新判断。
2024-03-12 23:11:51
323
1
原创 除以自身意外数组的乘积
个人思路:常规思路,两个数组,一个左乘积一个右乘积,求出每一个元素的左乘积和右乘积,求得时候可以用递归,然后遍历每个元素,把左右相乘(如果发现存在1个以上的0,直接返回全零)
2024-03-12 21:40:05
380
1
原创 274.H指数
个人思路:创建新数组统计每个引用次数的文献的数量,然后挨个判断每个数是不是h指数,会用到后缀和,方法原始,需要额外的数组空间。思路升级,查找的最大h数不可能超过文献数量,且可以从后往前找,找到的第一个就是结果。
2024-03-12 11:15:39
369
1
原创 45.跳跃游戏Ⅱ
个人思路:反向查找,但是python超时,参考跳跃游戏Ⅰ,每次在范围内查找能跳最远的index,其实就是在每次步长范围内查找index+nums[index]最大的那个。
2024-03-11 20:37:15
311
1
原创 55.跳跃游戏
对于每一个元素,在它能到达的最远的下标之内,判断其中的每个元素能不能到numsSize-1,同时更新最远距离i+nums[i]个人思路:一开始想用倒序,但是逻辑没想通,因此改用挨个判断。
2024-03-11 19:53:23
308
1
原创 买卖股票的最佳时机Ⅱ
个人思路:一开始理解错了,以为只能买卖两次。随后改用贪心算法,总结起来就一句话,遇到有得赚的就卖,有钱就拿了再说。卖了股票之后,记得把start改成卖出的日子,往后继续找有没有钱赚。
2024-03-11 15:20:16
338
1
原创 买卖股票的最佳时机
个人思路:对于price中每一个元素,只要后面存在比当前小的,那么卖出股票的时机就不可能当前元素,起码是后面那个更小的。因此额外定义一个卖出股票的下标索引,当找到更小的之后,更新卖出的下标。最大值采用持续更新策略,每次都计算一下取最大值。印象中C不是不可以用<=号的嘛,运行完才发现,大吃一惊。
2024-03-11 11:58:50
348
1
原创 189.轮转数组
个人思路:每个元素向后移k位,超出数组长度的用mod操作重新计数,需要额外的数组空间。额外思路:两次翻转,先翻转全部,再反转0到k-1和k-1到最后。python有自带翻转函数reversed。
2024-03-10 23:25:35
364
1
原创 169.多数元素
就这样各路军阀一直以这种以一敌一同归于尽的方式厮杀下去,直到少数阵营都死光,那么最后剩下的几个必然属于多数阵营,winner 就是多数阵营。(多数阵营 51个,少数阵营只有49个,死剩下的2个就是多数阵营的人。如果新来的士兵和前一个士兵是同一阵营,则集合起来占领高地,领主不变,winner 依然是当前这个士兵所属阵营,现存兵力 count++;当下一个士兵到来,发现前方阵营已经没有兵力,新士兵就成了领主,winner 变成这个士兵所属阵营的旗帜,现存兵力 count ++。常规个人思路:哈希表。
2024-03-10 18:15:06
329
1
原创 删除有序数组中的重复项Ⅱ
同Ⅰ,多加一个判断条件:前一个相等前两个不等,且不与i周围元素判断,而是与j元素判断,否则j处赋值之后会影响i处元素的判断。前两个元素必定保留,因此取j=1开始判断。由于要取j=1.因此提前判断numsSize。升级,其实只要判断nums[i]和nums[j-1]即可。
2024-03-10 17:31:46
342
原创 删除有序数组中的重复项
个人思路:双指针,i代表判断的元素,j代表已经判断过的,用于判断i是否与之前重复(可行原因在于数组不严格递增).,返回j+1是因为数组长度是下标+1,为什么从第二个元素开始判断,因为第一个元素必定会保留。
2024-03-10 16:48:01
309
原创 27.移除元素
可以改变元素顺序,因此可以一左一右,把右边不是val的替换左边是val的,例如val=1,nums=[1,2,3,4,5],可以直接变成5234。双指针,一个指针用于判断元素大小,还一个定义元素插入的位置。
2024-03-10 16:27:21
330
原创 合并两个有序数组
1. 个人思路,从i=m处开始添加nums2元素,添加到m+n停止,再对数组进行排序:时间复杂度较高,未使用两个数组已经排序的特点。nums1后面是空的,因此可以从后往前塞,从大到小塞,无需额外空间,时间复杂度O(m+n)思路:两个数组各一个指针,每次取出较小的放入队列,需要额外的数组空间。
2024-03-10 16:13:13
349
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人