- 博客(14)
- 收藏
- 关注
原创 在双GPU(核显+NVIDIA)计算机中正确安装Ubuntu 18.04下的NVIDIA驱动程序(解决循环登录等问题)
目录第一次安装:CUDA可用,但无法启动Steam第二次安装:遇到循环登录问题第三次安装:CUDA可用,可以启动Steam,但3D性能差第三次安装:CUDA可用,Steam正常启动,3D性能正常机器配置为:Intel Core i7-10875H, RTX 2070 Super Max-Q。一共经历了三次驱动安装过程,最终实现了:1)解决循环登录问题;2)能启动Steam并以正常性能运行3D游戏和程序。第一次安装:CUDA可用,但无法启动Steam主要参考了这篇知乎的第7节。结果:可以正常进入系
2020-10-15 14:17:09
1711
原创 在WSL中使用GPU:WSL2 + Ubuntu 18.04 + CUDA + Gnome图形界面环境配置
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录引言1. 确认Windows 10版本2. 在Windows上安装WSL23. 在Windows上安装CUDA on WSL驱动4. 在WSL2中安装CUDA Toolkit3. 测试CUDA是否能在WSL2中运作4. 安装Gnome图形界面其他问题引言鉴于在Linux环境下运行深度学习代码,并使用PyCharm调试的需求,原本打算安装Ubuntu双系统,但了解到WSL2已经支持使用GPU进行CUDA运算,故考虑使用WSL2实
2020-10-09 11:46:25
28732
25
原创 LeetCode 0096. Unique Binary Search Trees
问题简析给定整数n,有多少个不同的储存1-n的二叉搜索树?二叉搜索树(BST)要求左子树结点都比当前结点小,右子树结点都比当前结点大。思路:动态规划。设f(n)为有n个数字时可以构建多少种不同的树,则起始状态为f(0)=1, f(1)=1, f(2)=2考虑二叉搜索树的特点,可以发现,对于数列1,2,3,……,n从中取任意一个,它左边的数都是左子树的结点,右边的数都是右子树的结点。例如对于数列1,2,3:如果以1作为根结点,左子树为空,共有f(0)种情况。右子树包含2,3,有f(2)
2020-09-09 15:49:57
159
原创 LeetCode 0198. House Robber
问题简析作为职业小偷,我要去打家劫舍。但是注意如果两家相邻房子在同一夜被打劫了,则会触发警报。现在给定一个非负整数构成的数列,代表连续的若干房屋中的财产数量。计算一晚上最多能偷多少钱。例如:nums = [1,2,3,1],最大值为1 + 3=4;nums = [2,7,9,3,1],最大值为2 + 9 + 1 = 12.思路:动态规划。f(n) 表示a[0]到a[n-1]家最多能偷多少钱。如果偷a[n-1]家,那么就不能偷a[n-2]家,则此时值为a[n] + f(n-2)如果不偷a[n-1
2020-08-22 10:09:35
181
原创 LeetCode 0141. Linked List Cycle
问题简析Linked List Cycle给定一个链表,判断链表里是否有环路。思路:快慢双指针。快指针一次走两步,慢指针一次走一步。如果存在环路,则必然相遇。题解class Solution {public: bool hasCycle(ListNode* head) { ListNode* fastPtr = head; ListNode* slowPtr = head; while (fastPtr && fast
2020-08-21 10:20:23
111
原创 LeetCode 0172. Factorial Trailing Zeroes
问题简析给定一个整数n,返回其阶乘n!的末尾0的个数。要求在对数级时间复杂度完成。思路:1)因数里有多少个0,取决于其因数里有多少个10;2)而对10=2*5,因此可以进一步考察质因数里有多少个2和5,而10的个数取决于2和5当中较少的那个;3)再进一步思考,我们考察的是n的阶乘,因此因数由n, n-1, n-2, …, 2, 1构成。这些数当中,每隔一个就会出现一个偶数,也就会出现一个因数2;而5的倍数则每5个数才出现一次。4)因此可以得到结论:n!的质因数里,5的个数一定不多于2的个数。问题
2020-08-17 02:43:41
110
原创 LeetCode 0283. Move Zeroes
问题简析给定一个数组,将里面所有的0移动到数组末尾,其他数值保持相对位置不变。要求:1)不能申请额外的空间;2)操作次数尽可能少。思路:使用两个指针。i作为快指针,j作为慢指针。i,j同时从数组头开始向后移动,i只要遇到非0,就交换a[i], a[j]的位置(此时i,j本身的位置不变)。之后,j向后移动1位,i继续向后寻找非0数,直到i达到数组末尾。题解class Solution {public: void moveZeroes(vector<int>& num
2020-08-15 10:11:03
103
原创 LeetCode 0013. Roman to Integer
问题简析给定一个罗马数字,将其转为整数。初步思路分为三部分计算:C放在D,M左右的部分;X放在L,C左右的部分,I放在V,X左右的部分。1)C放在D,M左右的部分:如果在D,M出现前,C出现了,则C是-100,否则C是100.2)X放在L, C左右的部分:如果在L,C出现前,X出现了,则X是-10,否则是10.3)I放在V, X左右的部分:如果在V,X出现前,I出现了,则I是-1,否则是1.这种思路分几种情况考虑和读取,太繁琐,脑子都搞晕了。显然不是一个easy难度题该有的解法。更简洁的思路
2020-08-08 00:57:14
138
原创 LeetCode 0122. Best Time to Buy and Sell Stock II
问题简析给定一个某股票的价格数组,其中第i个元素就是该股票第i天的价格。设计一个算法来计算能获取的最大利润。允许多次买卖一支股票,但不能同时参与多笔交易(必须在再次购买前出售掉之前的股票)。思路:一天内可以先卖出,再买进,所以问题可以简化为,只要后一天股价比前一天高,就可以先买后卖。因此,两个两个地遍历数组,如果明天比今天价格高,那么今天就买入;否则就继续看明天和后天的价格。题解class Solution {public: int maxProfit(vector<int&g
2020-08-05 00:03:47
137
原创 LeetCode 0225. Implement Stack using Queues
问题简析使用队列去模拟栈操作。也就是说只能使用以下操作:队尾添加元素,队首访问、取出元素,获取队列大小,查看队列是否为空。在push时,每次插入,都将新元素添加到队尾,然后原队列元素用循环向后移动一位。这样新元素就在队首了。实现要点队尾插入新元素,然后移动新元素到队首void push(int x) { // 每次插入,都将新元素添加到队尾,然后原队列元素用循环向后移动一位 int qSize = qStack.size(); qStack.pus
2020-08-01 22:28:58
86
原创 LeetCode 0020. Valid Parentheses
问题简析给定一个字符串,判断该字符串里包含的所有括号是否都是有效的。有两个要求:1)一个左括号必须搭配一个同类的右括号;2)左右括号的位置必须正确。此外空字符串也被当作正确字符串。思路1(错误)使用map记录所有左括号’(’, ‘{’, ‘[’ 的个数。每次读取字符串的一个字符。每次读取右括号时,先看看对应的左括号计数是否为0。如果为0,则直接返回不合法。如果不为0,则对应左括号的计数-1。最后结束时,必须保证所有左括号的计数为0,否则也不合法。第一版想到了这个思路,但这个思路存在一个
2020-07-31 22:26:57
168
2
原创 LeetCode 0100. Same Tree
问题简析给定两个二叉树,写一个函数判断两者是否相同。相同二叉树指结构和对应位置的结点值都要相同。分析:递归判断。1)如果两棵树当前结点都非空且值相等,则进一步同时判断两者左子树和右子树是否相等,必须左右子树同时相等才返回true。2)如果当前结点同时为空结点,则1)两棵树为空树,或者2)同时遍历到了空结点。此时都可以认为当前结点相等,返回true。3)其他情况一律返回false。注意事项记得处理两个树都是空树的输入情形。题解class Solution {public: bool
2020-07-31 01:32:00
121
原创 LeetCode 0107. Binary Tree Level Order Traversal II
问题简析给定一个二叉树,自底向上、从左到右地返回结点的值。从样例来看,应该返回一个二维数组,每个子数组是每层返回的结果。思路:可以先自顶向下、从右到左地层序遍历该树,然后将数组里的元素逆序排列(但要保持二维数组的结构)。要点层序遍历层序遍历使用队列进行。伪代码如下:queue.enque(root)while queue is not empty: current = queue.deque() result.add(current) queue.enque(curr
2020-07-29 02:40:17
132
原创 LeetCode 0101. Symmetric Tree
问题简析判断一个二叉树是否对称。初步思路:设计一个递归函数,里面有两个子递归过程:1)遍历左子树的左和右子树的右,只要有一层出现不相等,就返回false;2)遍历左子树的右和右子树的左,只要有一层出现不相等,就返回false。注意:1)对应位置结点都等于nullptr也合法。2)一开始,算法设计错误,针对上述两个子递归过程分别设计了两个递归函数。结果对情况1)的子树,就只搜索他的左子树左和右子树右,对情况2)的子树就只搜索他的左子树右和右子树左。因此,对于测试用例:[9, 25, 25, N
2020-07-27 22:37:57
113
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人