JZ22 链表中倒数最后k个结点
描述输入一个长度为 n 的链表,设链表中的元素的值为 a_i ,返回该链表中倒数第k个节点。
如果该链表长度小于k,请返回一个长度为 0 的链表。
数据范围:
0 \leq n \leq 10^5,0 \leq a_i \leq 10^9,0 \leq k \leq 10^9要求:空间复杂度 O(n),时间复杂度 O(n)
进阶:空间复杂度O(1),时间复杂度 O(n)
例如输入{1,2,3,4,5},2时,对应的链表结构如下图所示:
其中蓝色部分为该链表的最后2个结点,所以返回倒数第2个结点(也即结点值为4的结点)即可,系统会打印后面所有的节点来比较。
示例1输入:{1,2,3,4,5},2返回值:{4,5}说明:返回倒数第2个节点4,系统会打印后面所有的节点来比较。
示例2输入:{2},8返回值:{}
题解1首先求出链表的长度n,从题目的倒数第k个结点,推出是正数的第n - k个结点。若n - k < 0,则返回空值
/** * struct ListNode { * int v ...
jz23 链表中环的入口结点
描述给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。
数据范围: n≤10000,1<=结点值<=10000
要求:空间复杂度 O(1),时间复杂度 O(n)
例如,输入{1,2},{3,4,5}时,对应的环形链表如下图所示:
可以看到环的入口结点的结点值为3,所以返回结点值为3的结点。
输入描述:输入分为2段,第一段是入环前的链表部分,第二段是链表环的部分,后台会根据第二段是否为空将这两段组装成一个无环或者有环单链表
返回值描述:返回链表的环的入口结点即可,我们后台程序会打印这个结点对应的结点值;若没有,则返回对应编程语言的空结点即可。
示例1输入:
{1,2},{3,4,5}
返回值:
3
说明:
返回环形链表入口结点,我们后台程序会打印该环形链表入口结点对应的结点值,即3
示例2输入:
{1},{}
返回值:
"null"
说明:
没有环,返回对应编程语言的空结点,后台程序会打印"null"
示例3输入 ...
JZ52 两个链表的第一个公共结点
输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)
数据范围: n≤1000要求:空间复杂度 O(1),时间复杂度 )O(n)
例如,输入{1,2,3},{4,5},{6,7}时,两个无环的单向链表的结构如下图所示:
可以看到它们的第一个公共结点的结点值为6,所以返回结点值为6的结点。
输入描述:输入分为是3段,第一段是第一个链表的非公共部分,第二段是第二个链表的非公共部分,第三段是第一个链表和第二个链表的公共部分。 后台会将这3个参数组装为两个链表,并将这两个链表对应的头节点传入到函数FindFirstCommonNode里面,用户得到的输入只有pHead1和pHead2。
返回值描述:返回传入的pHead1和pHead2的第一个公共结点,后台会打印以该节点为头节点的链表。
示例1输入:
{1,2,3},{4,5},{6,7}
返回值:
{6,7}
说明:
第一个参数{1,2,3 ...
jz25 合并两个排序的链表
描述输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。
数据范围: 0≤10000≤n≤1000,−1000≤节点值≤1000−1000≤节点值≤1000要求:空间复杂度 O(1),时间复杂度 O(n)
如输入{1,3,5},{2,4,6}时,合并后的链表为{1,2,3,4,5,6},所以对应的输出为{1,2,3,4,5,6},转换过程如下图所示:
或输入{-1,2,4},{1,3,4}时,合并后的链表为{-1,1,2,3,4,4},所以对应的输出为{-1,1,2,3,4,4},转换过程如下图所示:
示例1输入:
{1,3,5},{2,4,6}
返回值:
{1,2,3,4,5,6}
示例2输入:
{},{}
返回值:
{}
示例3输入:
{-1,2,4},{1,3,4}
返回值:
{-1,1,2,3,4,4}
题解1可以使用虚拟头结点,可以再新建一个链表,然后把两个 ...
JZ24 反转链表
描述给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。
数据范围: 0≤10000≤n≤1000
要求:空间复杂度 O(1) ,时间复杂度 O(n) 。
如当输入链表{1,2,3}时,
经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。
以上转换过程如下图所示:
示例1输入:
{1,2,3}
返回值:
{3,2,1}
示例2输入:
{}
返回值:
{}
说明:
空链表则输出空
题解1使用栈当做中转站,把每个节点倒过来,然后重新拼成一个新链表
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */class Solution { public: /** ...
JZ6 从尾到头打印链表
描述输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。
如输入{1,2,3}的链表如下图:
返回一个数组为[3,2,1]
0 <= 链表长度 <= 10000
示例1输入:
{1,2,3}
返回值:
[3,2,1]
算法思路1主要考察翻转数组的操作,把链表的数据放到数组里,然后在数组里操作,一个比较简单的操作是调用C++的库函数
class Solution {public: vector<int> printListFromTailToHead(ListNode* head) { vector<int> vt; ListNode* p = head; while(p != nullptr){ vt.push_back(p->val); p = p->next; } reverse(vt.begin(),vt.end()); ...
Win11配置多个CUDA环境
概述由于跑项目发现需要配置不同版本的Pytorch,而不同版本的Pytorch又对应不同版本的CUDA,于是有了在Win上装多个CUDA的打算
默认已经在电脑上装了一个CUDA
现在开始下载第二个CUDA版本,前面下载的操作和普通安装的几乎一样
安装CUDACUDA下载链接
下载自己需要的CUDA版本,以我自己要安装的为例
下载打开exe文件进行安装,第一步不用管,直接点击确认
后面选择自定义安装,只选择安装CUDA
其他一路下一步就可以了
安装cuDNNcuDNN下载链接
PS:下载需要登录一下账号
下载下来后,把压缩包解压,得到如下文件
将bin,include文件夹中的文件,分别复制到下列地址对应的文件夹下(CUDA的安装地址,以我的地址为例),遇到提示,为全部选择覆盖和替换。
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7
需要注意的是,lib文件夹里的所有文件,需要复制到
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\lib\x6 ...
学校GPU平台使用教程
首先连接内网登录平台
一般使用的话,直接找到开发环境一栏,创建环境。然后通过Pycharm中的ssh连接
在Pycharm中,找到工具—部署—配置
点击+后选择SFTP
在SSH配置那里后点击后面...
进入后填写主机名和用户名,这里详细讲一下
例如平台给的ssh连接是
ssh://root@paas.xxx-xxx-xx-xx.nip.io:xxxxx
这里用户名就需要填写
root
主机名填写
paas.xxx-xxx-xx-xx.nip.io
端口号填写xxxxx
然后填写创建环境时设置的密码
这一步完事以后,点击确定,返回到之前的页面,点击映射
配置好本机的地址和远程的地址,点击确认
之后选择工具—部署—选项
可以根据自己习惯决定是否配置一下
然后找到工具—启动SSH会话,选择刚刚配置的SSH
然后输入
pythonimport sysprint(sys.executable)
记住输出的地址,比如我的就是
usr/bin/python
最后,找到项目—项目XXXX—Python解释器,找到添加解释器—SSH
选择刚刚配置的SSH服务器,然后下一步
点击下 ...
使用蓝牙外设却不小心把台式机电脑蓝牙关了
起因今天犯了一个贼SB的错误,起因是蓝牙键盘突然就不能输入了(虽然是连接状态,但是按什么键都没有反应)
原来我的解决方法就是重启一下电脑,但是那会电脑开了贼多的软件。我就想重启也太麻烦了,既然重启的本质也是重启蓝牙,那我要不直接就把蓝牙重启算了,当时想到这里啊,我心中一阵狂喜,觉得我真TMD是个天才
于是我兴冲冲的找到系统设置—蓝牙,把蓝牙关了,然后当我准备开启蓝牙的时候,我傻眼了,艹,我外设都是蓝牙连接的啊,这TM开不开了
解决过程尝试用带USB接收器的鼠标我的鼠标不仅可以蓝牙连接,还可以用USB接收器连接,我心想这不是轻轻松松简简单单。于是给鼠标换了一个连接方式,插入了USB接收器。但是奇怪的事情发生了,无论我怎么动鼠标,鼠标的指针就是纹丝不动。我怀疑难道是关了蓝牙功能,连这个都影响到了吗
尝试用有线设备虽然心中有一丝紧张,但是我感觉这不就是个小事嘛,那要不找个有线的外设不就可以了。于是翻箱倒柜,刨出来家里的古董有线键盘,插入了电脑前面的USB口。
但是,重量级来了,无论按什么键,都没有反应,让我一度以为是不是键盘寄了。然后我把键盘插到了笔记本上,发现还是可以用的,灯也是亮的(但是 ...
拼模型尝试
概述记录一下自己首次组合模型的过程,希望可以为以后论文打基础。
PS:由于自己是零基础,看了一下李沐的教程,感觉理论部分有点多,没看完可能deadline都到了。唐老师的人工智能课也看了看,总感觉不是特别系统,都是一个一个项目,于是我打算效率亿点点,需要什么先学什么。
我需要跑的一个模型是这样的架构
分析问题客观分析一下我遇到的这个问题
1.目标问题
把这个架构跑通$\rightarrow$
从中文电子病历提取有用信息$\rightarrow$
进行医疗大数据挖掘、临床辅助决策系统、AI 电子病历质控系统构建等的基础工作
2.方法问题
寻找相似的项目或者使用了相似模型架构的项目,把他们的模型删删改改
删改可能需要借助到模型的官方文档,例如PaddleNLP文档,或者PyTorch文档
然后多借鉴一些博客的方法
3.执行问题
先安装一下paddle,然后尝试先把网上的项目跑通,在看懂的基础上进行修改
执行阶段安装paddleNLP# 默认前提是已经安装好了paddle(2.5.1),我之前已经安装完,现在直接进入这个环境(CUDA 11.0)conda activate paddle# ...