自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Leetcode】并查集/DFS/BFS多解

只要两个节点直接连接,且其中至少一个节点受到恶意软件的感染,那么两个节点都将被恶意软件感染。这种恶意软件的传播将继续,直到没有更多的节点可以被这种方式感染。被感染节点数大于 1 就算恢复该被感染节点,整个连通子图也无法恢复正常;是在恶意软件停止传播之后,整个网络中感染恶意软件的最终节点数。被感染节点数等于 1 只需要恢复该被感染节点,整个连通子图将恢复正常;记录下已访问过的节点,该集合的元素个数以及该集合中初始感染的元素;模拟移除某个节点后,统计被感染的节点数量,取。个节点组成的网络,用。

2024-04-17 15:45:54 296

原创 【Leetcode】正则表达式

正则只是字符串处理的一种简便方法,如果处理不好也可以直接模拟,不要摆烂;

2024-04-12 10:06:29 558

原创 【笔试】输入输出处理

读取"[{'Name':'Alice', 'Height':'163', 'Weight':'57'}, {'Name':'Bob', 'Height':'177', 'Weight':'73'}, {'Name':'Cici', 'Height':'166', 'Weight':'49'}]"str(list)[1:-1].replace(', ', '->') str会生成"[1, 2, 3, 4, 5, 6]",用切片除去括号。() 读取所有内容,并以列表形式返回;

2024-04-12 09:31:42 134

原创 【Leetcode】拓扑排序—课程表系列

有向无环图DAG图示:拓扑排序结果:{2,3,5,1,7,4,6} {3,2,1,5,7,6,4}不唯一拓扑排序结果满足:对于图中的每条有向边(u,v),u要排序在v之前;应用:判断有向图中是否有环,可以生成拓扑序列;核心思想:用队列维护一个入度为0的节点的集合;step1:一次遍历,统计所有节点的入度,并将所有入度为0的节点加入队列;step2:从队列中取出一个节点u放入排序列表,并将节点u的全部有向边(u,vi)删除,删除过程中判断节点vi的入度是否为0,若为0则压入队列;

2024-04-08 15:44:34 666

原创 【Leetcode】top 100 技巧

以[1,2,3,2]为例:nums[0] = 1 --> nums[1] = 2 --> nums[2] = 3 --> nums[3] = 2 --> nums[2] = 3 (1 --> 2 --> 3 --> 2 --> 3 --> 2 --> ...)出现了。:以[1,2,3]为例:[1,2,3] [1,3,2] [2,1,3] [2,3,1] [3,1,2] [3,2,1],给你一个整数数组。,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

2024-04-03 19:50:35 695

原创 【Leetcode】top 100 回溯

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。从首字母的网格位置入手,先加入当前字母,然后在不越界的情况下加入上/下/左/右的字母,判断加入的第n个字母是否和word中第n个字母相同;加入path的子串必须是回文子串,需要先判断再加入,因此把枚举范围从单个字符变成字符串长度,然后验证当前长度的子串是否是回文;2.backtrack()函数的参数为row,表示当前开始放第row行的皇后,小于row的行(row行往上的)都已经放置皇后了。

2024-04-03 19:49:24 905

原创 【Leetcode】top 100 图论

(水)组成的的二维网格,请你计算网格中岛屿的数量。遍历队列,若当前位置是腐烂橘子则将其上下左右四个点入队,若当前位置是新鲜橘子则将新鲜橘子数量-1再将其上下左右四个点入队;需要将处理过的位置的值置为0,代表不再处理;核心:使用「边」来代表有无字符,使用「点」来记录是否为「单词结尾」以及「其后续字符串的字符是什么」若当前点是岛屿时,将其上下左右四个点都加入队列;若当前点是岛屿时,向上下左右四个点做深度搜索;2.图的表示方法:邻接矩阵适合表示稠密图,邻接表适合表示稀疏图;的新鲜橘子都会腐烂。

2024-04-01 16:38:24 995

原创 【Leetcode】top 100 二分查找

给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。两遍二分查找,第一遍找target,第二遍找target+1,都靠左取;不存在目标值情况:目标值过小/大,idx1=0/len(nums)目标值没出现:nums[idx1]!

2024-04-01 09:48:13 743

原创 【Leetcode】top 100 贪心算法

思路:如果day2价格高于day1价格,就假设day1买入day2卖出计算收益,如果day3价格高于day2价格,得假设day1买入day2不处理day3卖出...即需要记录前置的历史最低价,对于第一个字符(左界),需要将其最远的同字符(右界)与其共同在一个片段中,然后界内判断还需不需要纳入其他字符的同字符(改变右界)当左右界重合时得到了符合要求的一个最短片段;:一次遍历每个元素(除最后),用变量记录当前能到达的最远位置,下标大于最远距离时遍历结束,当遍历结束时判断最远位置是否到达最后一个坐标即可;

2024-03-29 17:50:48 897

原创 【Leetcode】top 100 栈

维护一个递减的单调栈,初始化间隔变量interval,若入栈元素大于栈顶元素,弹出栈顶元素并将其对应的输出坐标置为interval,然后 interval+1,继续循环至前一个大于等于当前元素的值;对于高度为 height[i] 的矩形,最大面积的宽为其左右第一个小于该高度的元素下标差-1,故将问题转换为给定高度为 height[i],求其左右第一个小于该高度的元素下标差;left[i] 为 height[i] 的左界下标,right[i] 为 height[i] 的右界下标;,表示其中方括号内部的。

2024-03-29 10:10:13 470

原创 【Leetcode】top 100 堆

当左右两边的元素数量相等,要插入一个新元素时,应该是加在左边的大根堆里面,但为了保证顺序,所以先加入右边的小根堆,再令其弹出右边的最小值后加在左根堆;若列表长度为偶数,则中位数是左边的最大值和右边最小值的平均值;将原数组最后元素赋值给根节点完成根节点的删去,再不断交换父节点与其子节点的,直至满足堆的规律(数据下沉);引入的 topk_split 可以解决获得前(第)k小(大)的数,只排序前(后)k个小(大)的数等问题;:先把新元素添加到数组最后,不断交换插入元素与其父节点,直至满足堆的规律(数据上浮);

2024-03-29 10:09:14 275

原创 【Leetcode】top 100 二叉树

前序遍历的第一个元素为根节点,在中序遍历序列找到根节点后就能将元素二分为左子树元素和右子树元素,再在前序遍历序列中找到左子树的根节点和右子树的根节点,...二叉搜索树:左子树上所有节点的值都小于根节点的值,右子树上所有节点的值都大于根节点的值,且左子树和右子树也是二叉搜索树。对于当前节点,需要将其左子树的根节点移到右侧才能满足链表要求,而其右子树的根节点在链表中需要接在左子树最右结点之后。不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。

2024-03-25 21:05:34 1161

原创 【Leetcode】top 100 多维动态规划

text2[j]时,dp[i][j] = max(dp[i-1][j], dp[i][j-1])初始条件:dp[0][j] = sum(nums[0][:j]) dp[i][0] = sum(nums[:i][0])递推规律:dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + nums[i][j]递推规律:当 word1[i-1] = word2[j-1] 时,dp[i][j] = dp[i-1][j-1]初始条件:dp[0][:] = 1 dp[:][0] = 1。

2024-03-21 20:11:10 830

原创 【Leetcode】top 100 链表

用快慢指针截出k个结点,保留left的头结点old_head和right的尾结点old_tail,翻转k结点得到新的头结点new_head和尾结点new_tail,将原头链接到新头,新尾链接到原尾,再更新old_head/left/right即可;假设环结点到头结点的距离为x,环结点到双指针相遇的结点的距离为y,双指针相遇的结点到环结点的距离为z,则有:慢指针走x+y,快指针走x+n(y+z)+y;当n=1时,x=z,即从相遇结点和头结点分别移动idx1和idx2,两者相遇的结点即为环结点;

2024-03-21 15:28:24 1001

原创 【Leetcode】 top 100 动态规划

动态规划的关键是定义dp然后找到递推关系;

2024-03-21 15:27:02 660

原创 【Leetcode】top 100 矩阵

第二次遍历再修改,若当前行需要被改变,直接全置零,若当前行不需要被改变,再改变当前行中被列上的0影响的元素;空间复杂度O(m+n),时间复杂度O(2mn),若有0,更新后的状态需要全0,即损失的初始状态不重要;若无0,更新后的状态只会受到该行或该列的影响,所以提前置零记录该行或该列情况不影响最终结果;原第一行取完后,将列转行再倒序,就能取到原最后一列;分析:一定会转满min(m//2, n//2)圈,最后不剩/剩一行/剩一列/剩一个中心元素;在当前行的范围内,小于当前列值,后续就只能在较小的列中寻找;

2024-03-13 22:26:32 651

原创 【Leetcode】top 100 普通数组

当前区间的起点值大于前一段区间的最大终点值,存下前一段区间,然后更新start更新为当前区间的起点值,end更新为当前区间的终点值(由于start<=end,所以当前区间的终点值自然大于前一段区间的最大终点值,可以和动态维护一段区间的最大终点值操作合并)dp[3]的子组合:[5,4,-1,7][4,-1,7][-1,7][7] dp[3]=15。如[1,10][2,11]和[1,10][2,9],直至找到下一个区间的起始值大于重叠终点;当区间重叠时,重叠起点为当前区间的起点值,而。

2024-03-11 11:37:39 339

原创 【Leetcode】top 100 子串

用双指针维护一个滑动窗口,先增大right指标至窗口内能找到t中的全部字母,然后移动left指标缩小窗口;sum[i, j] = pre[j]-pre[i-1]=k 由于 i-1<j,所以遍历到下标 j 时就能判断 [0,j] 内有多少满足求和条件的子数组;:一次遍历元素,当当前累积和超过k时(若当前元素>k,直接切换到下一元素),去除前置元素至和小于k(用长度length调用前置元素):当窗口右滑 有新元素入窗时,移出所有值小于新元素的元素,再判断现有最大值是否超出窗口长度, 用。所有字符的最小子串。

2024-03-10 14:30:11 406

原创 【Leetcode】top 100 滑动窗口

遍历p用listp表示其字母情况,在这里同时统计s[0:lenp]的字母情况(要求lens>=lenp)然后切换到对s的遍历,当当前下标非0时需要更新lists的字母情况(消去前一字母并添加新的字母)判断lists和listp是否相等即可;分析:因为要判断重复字符,想到用哈希表查找会更快,但问题在于出现重复字符时,怎么更新哈希表,去除前一重复字符之前的所有元素...我的做法是没动哈希表但设置了一个上界值,超出上界值(即位于前一重复字符之前的所有元素)的查重无效;的子串,返回这些子串的起始索引。

2024-03-07 15:52:22 348

原创 【Leetcode】top 100 双指针

以 [a,b,c,d,e]为例:固定a时,要在[b,c,d,e]中找到>=a的第一个值(假设是c),故a-c蓄水ax1-b—ac宽度好计算,但需要用变量储存ac中间的体积;当height[left] < height[right]时,移动left指针,若找到比height[left]更大的元素时,更新水量和left指针;递推式:leftmax[i] = max( leftmax[i-1], height[i] )用leftmax[i]代表[:i]的最大值,用rightmax[i]代表[i:]的最大值,

2024-03-07 10:20:30 1089

原创 【Leetcode】top 100 哈希

sorted对所有可迭代对象排序,使用方法为sort(str),会生成一个新的list保存排序结果;分析:一层循环遍历数组元素,求以该数值起始的最长序列长度(仅用单变量维护)但由于在求以某个数值起始的最长序列长度时也需要一层循环,不满足题目要求;,所以可以在进行第二层循环前加入判断条件(前一数值和当前数值不在该数组中),这样数组中的每个数只会进入内层循环一次,时间复杂度满足要求;3.sort和sorted:sort是list的内置函数,使用方法为list.sort(),实现原地修改的排序;

2024-03-03 16:15:01 936

原创 【Leetcode】数与位

转二进制:bin(n).replace('0b','') #因为bin生成的二进制字符串会带有'0b'的前缀。

2024-03-02 21:09:25 994

原创 【Leetcode】字符串 string

字符串赋值#多行赋值str = '''smileaaasmileaaaasmileaaaaa'''#包含'的赋值1.str.strip() #去除开头或结尾的空格2.str.lstrip() #去除开头的空格3.str.rstrip() #去除结尾的空格4.str.replace(" ","") #通过替换去除所有空格5."".join(a.split()) #先按空格拆分后再进行拼接判断字符串中字符类型1.str[i].isdigit() #判断字符串中的数字。

2024-03-01 16:55:49 1073

原创 【Leetcode】字符串 string 补充知识

dp[i, j]表示以第i位开头以第j位结尾的字符串是否是回文串。

2024-03-01 16:53:43 722

原创 【梳理】视频超分辨率研究进展

文章内容:对分析现有工作归纳出四组件(Propagation/Alignment/Aggregation/Upsampling)基于前两个组件设计了双向传播和特征级的光流对齐(BasicVSR)并将其作为baseline添加两个扩展Information-Refill and Coupled Propagation 得到(IconVSR)对输入图像进行翻转和旋转,为每个样本生成四个增强输入,然后对每一个都应用EDVR,对还原后的输出进行反变换,取平均值作为最终结果;将传播距离由相邻一 帧扩大到相邻两帧;

2024-02-27 21:18:56 865

原创 【Leetcode】列表 list

1.list.append() #在列表末尾添加一个元素list.unshift() #在列表开头添加一个元素2.list.extend() #在列表末尾添加至少一个元素3.list.insert(idx,val) #在列表任意位置添加一个元素4.切片 #通过替换的方式在列表任意位置添加至少一个元素2.list.pop(idx) #无指定位置时默认删除最后一个元素list.shift() #删除列表第一个元素3.list.remove(val) #删除和指定元素值相同的第一个元素。

2024-02-27 11:48:16 740

原创 【梳理】Attention/Transformer/ViT

图像展开的一维向量过大,将其切分成patch再展开后进行可训练的投影得到token;1.由于该任务是做图像分类,所以加入了0号token,其输出结果为最后的类别预测;(patch中包含有相对位置信息)2.位置编码:消融实验证明是否加入位置信息对实验结果的影响不大。较大时,点积结果过大,会将softmax推到梯度极小的区域;(过大的点积结果会使方差变大,造成训练时梯度更新的不稳定)3.Multi-head Attention:见上。3.MLP:倒瓶颈结构(通道维度先增后减)嵌入该token的位置信息。

2024-02-26 22:33:40 433 1

原创 [韦东山]嵌入式Linux应用开发 lecture11 网络编程概念

2、发起并建立连接:connect(IP+端口)(使用“IP+端口”表示源/目的)服务器server:被动的响应请求。客户端client:主动的发起请求。数据传输三要素:源、目的、长度;(虚假连接,只为包含源/目的)网络通信方式:TCP/UDP。

2023-11-15 21:20:17 57

原创 [韦东山]嵌入式Linux应用开发 lecture10 tslib

保存当前数据:memcpy(&pre_samp_mt[0][i], &samp_mt[0][i], sizeof(struct ts_sample_mt));tslib框架:ts_setup(ts_open/ts_config)---ts_read/ts_read_mt---ts_close。移动库文件:cp lib/*so* -d 工具链库文件目录。移动头文件:cp include/* 工具链头文件目录。tslib是触摸屏的开源库,可以用来访问触摸屏设备;5. 关闭节点:ts_close(ts);

2023-11-13 21:21:48 69

原创 [韦东山]嵌入式Linux应用开发 lecture9 触摸屏

②获得x坐标:在x层施加电压,y层不操作,触点相当于探针,可通过读取触点处电压,再与施加电压进行比值得出坐标(建立在电容与长度成正比的条件上)电容屏支持多点触摸,根据触点坐标能否和触点匹配会将触摸屏分为type A和type B两类;③转换成LCD坐标:根据LCD屏尺寸校准,建立电压值和坐标位置的对应关系;type B:触点坐标和触点匹配,上报数据时会先上报触点ID再上报其数据;①电容屏被按下时,引入了新的电容,影响了接收电极接收到的电荷大小;type A:触点坐标无法和触点匹配;

2023-10-18 22:35:55 76 1

原创 [韦东山]嵌入式Linux应用开发 lecture8 读取输入数据

当出现数据时,驱动程序会将APP唤醒,read函数恢复执行并将数据返回;若输入中不含“nonblock”,则以休眠-唤醒(阻塞)方式读取驱动程序中的数据,返回数据或进入休眠等待数据;若输入中含“nonblock”,则以查询(非阻塞)方式读取驱动程序中的数据,返回数据或“read err”;调用read函数时,若驱动程序中有数据,则read函数返回数据;调用read函数时,若驱动程序中有数据,则read函数返回数据;流程:注册信号处理函数--打开驱动程序--把APP的进程号告诉驱动程序--使能"异步通知”

2023-10-17 00:24:01 85 1

原创 [LeetCode]1567. 乘积为正数的最长子数组长度

起先我是写了一版代码,并通过不断调试通过了94/112个案例,但在某个案例上反复调试不通后我去看了评论区的解法,再看我自己的代码就发现这是什么垃圾...遂删除记录。其实之前做过动态规划的题,但光分析题目的时候还是想不起来...

2023-10-15 21:16:38 47 1

原创 [韦东山]嵌入式Linux应用开发 lecture7 输入系统应用编程

evdev_handler(最常用):把 input_event 结构体保存在内核 buffer ,支持多个 APP 同时访问。同步事件“0000 0000 0000 0000”(type=code=value=0)会分隔开独立的完整事件。③ 输入系统驱动层对应的驱动程序处理中断: 读取到数据,转换为标准的输入事件,向核心层汇报;查看设备节点对应的硬件信息:cat /proc/bus/input/devices。查看输入设备的设备节点:ls /dev/input/* -l。⑤ APP 对输入事件的处理;

2023-10-12 20:23:28 132

原创 [LeetCode]1769.移动所有球到每个盒子所需的最小操作数

嗯...还是没有算法思维,只会暴力求解...看了下官方题解,可以根据前一个盒子的操作数得到下一个盒子的操作数,尝试一下这个解法,代码和结果放在附;一是需要注意left and right的初始值,因为第一个盒子有球会在计算第二个盒子的操作数时增加left;二是需要注意操作数的变化是根据上一个盒子的操作数和左右数变化的,所以先更新output再更新left and right;附""""""right = 0left = 1else:left = 0。

2023-10-08 22:33:04 38 1

原创 [LeetCode]2789.合并后数组中的最大元素

其实在第二次代码记录之前还有一些小问题,主要是考虑不够周全:1.第一次是max_value的赋值问题,所以我直接赋了起始点的值:max_value=nums[-1]这份代码没通过[91,50]的案例测试;这个起始点的赋值的确处理得很潦草...2.我改为赋nums的最大值:max_value=max(nums)这份代码没通过[59,17,33]的案例测试;忽略了累加值仍低于初始max_value其实可以加个条件判断;3.增加条件判断(代码见附)

2023-10-01 20:29:15 164

原创 [韦东山]嵌入式Linux应用开发 lecture6 freetype

freetype安装:先编译安装zlib,再编译安装libpng,最后编译安装freetype;tip:LCD显示的坐标系原点在左上角,调用freetype函数的坐标系原点在左下角;FT_Get_Char_Index:根据编码值获得glyph_index;FT_Load_Glyph:根据glyph_index获得glyph;③根据编码值通过charmap找到关键点(glyph);FT_Render_Glyph:渲染出位图;freetype功能:显示矢量字体;②使用数学曲线连接关键点;①确定字符的编码值;

2023-09-28 19:08:21 68 1

原创 [韦东山]嵌入式Linux应用开发 lecture5 字符显示

①UTF-16 LE(ff fe):两个字节(16b位),小字节序(权重小的在前)②UTF-16 BE(fe ff):两个字节(16b位),大字节序(权重大的在前)前16个字节表示区码,后16个字节表示位码,每个区有94个汉字;①ASCII:一个字节,七位表示(2^7=128)第八位为0;③UNICODE:三个字节,任意字符对应唯一数值;③UTF-8:变长编码,每个字节的高位带长度信息。显示中文字符:HZK16(16*16的点阵字库)②ANSI:两个字节,不同字符集对应不同显示;缺点:容量有限、容错低。

2023-09-28 19:07:30 118 1

原创 [LeetCode]198.打家劫舍

真就边刷边学...

2023-09-22 21:06:57 130 1

原创 [韦东山]嵌入式Linux应用开发 lecture4 Framebuffer应用编程

假设更改LCD中位置为(x,y)的像素点的颜色值,则其内存位为:base+(y*x_res+x)*bpp/8。Linux通过Framebuffer驱动程序来控制LCD,其中保存着单帧图像的全部像素点颜色值。tip:需要使用open/ioctl/mmap函数,可通过man指令来查找头文件和函数原型;③应用程序通过mmap映射Framebuffer,在Framebuffer中写入数据;根据LCD分辨率、BPP分配Framebuffer;根据LCD的参数设置LCD控制器的时序、信号极性;

2023-09-20 20:08:57 160 1

原创 [韦东山]嵌入式Linux应用开发 lecture3 文件IO

查找命令:man 2 open//man read//man 2 write。内核态:根据传入参数触发sys_open/sys_read/sys_write。文件保存在块设备,会找到块设备驱动程序;普通文件:使用FAT32/EXT4/其他格式的文件系统驱动代码来打开文件;应用态:使用标准接口open/read/write。操作:f-往前翻 b-往后翻 q-退出。内核中的sys_open操作需要分辨文件类型。字符设备节点:根据主设备号在内核中找到驱动;

2023-09-20 20:07:57 45 1

空空如也

空空如也

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

TA关注的人

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