1.4k 1 分钟

# 说明 本文记录使用 CLion 的 IDE 环境,使用 WSL2 环境下的 CUDA 来调用 PyTorch 的 libtorch 库内容。 libtorch 是 PyTorch 框架提供的 C++ 接口,因为最近的课题对性能有比较高的要求,并且有自定义算子的需求,所以需要用到相关的代码。 WSL2 下的 CUDA 环境配置可以参考这篇文章。 # 配置 # 下载 libtorch 从 PyTorch 的官方网站下载自己所需版本的 libtorch 。注意和自己的 CUDA 版本也要对应。 # CLion 配置 打开 CLion 新建一个 CUDA executable 工程。然后修改...
1.7k 2 分钟

# 说明 本文记录 Windows 环境下 WSL2 系统中配置 CUDA 环境的过程。配置过程主要参考这篇知乎文章以及官方文档。 本文内容中省去在 Windows 下安装 WSL2 的过程,这里默认已经安装该环境。如果没有安装 WSL2 ,可以参考官方文档中提供的说明。 # 配置 # 安装驱动 参考官方文档中的 2.3 小节。 下载好驱动之后直接安装,安装选项均为默认值。 # 安装 CUDA 参考官方文档中的 2.6 小节。文档中提供了几种可选的方法,任选一种即可,如果全部执行一遍反而可能会出问题。我自己选择的是 Installation of CUDA Toolkit using...
9k 8 分钟

# 面试题 58:翻转字符串 # 题目一:翻转单词顺序 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串 I am a student. ,则输出 student. a am I 。 # 思路 第一步翻转句子中所有的字符。比如翻转 I am a student. 中所有的字符得到 .tneduts a ma I ,此时不但翻转了句子中单词的顺序,连单词内的字符顺序也被翻转了。第二步再翻转每个单词中字符的顺序,就得到了 student. a am I 。 # 代码 #include...
8.6k 8 分钟

# 面试题 53:在排序数组中查找数字 # 题目一:数字在排序数组中出现的次数 统计一个数字在排序数组中出现的次数。例如,输入排序数组 {1,2,3,3,3,3,4,5}\{1,2,3,3,3,3,4,5\}{1,2,3,3,3,3,4,5} 和数字 333,由于 333 在这个数组中出现了 444 次,因此输出 444。 # 思路 由于输入的数组是有序的,那么我们只需要找到目标数字第一次和最后一次出现的位置,然后即可知道目标数字出现的次数。 可以通过二分法查找目标数字的上界和下界。详细解析可以参考这个链接。 # 代码 #include <iostream>#include...
3.6k 3 分钟

# 面试题 49:丑数 # 题目 我们把只包含因子 222、333 和 555 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 150015001500 个丑数。例如,666、888 都是丑数,但 141414 不是,因为它包含因子 777。习惯上把 111 当作第一个丑数。 # 思路 比较直观的做法是从 111 开始,判断一个数是否是丑数,直到找到第 150015001500 个丑数,但是这样的做法效率不高。 换一种思路。丑数的因子只有 222、333 和 555...
11k 10 分钟

# 面试题 39:数组中出现次数超过一半的数字 # 题目 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如,输入一个长度为 999 的数组 {1,2,3,2,2,2,5,4,2}\{1,2,3,2,2,2,5,4,2\}{1,2,3,2,2,2,5,4,2}。由于数字 222 在数组中出现了 555 次,超过数组长度的一半,因此输出 222。 # 思路 # 解法一:基于 Partition 函数的时间复杂度为 O(n)O(n)O(n) 的算法 对于一个出现次数超过数组长度一半的数字,如果把数组排序,那么排序之后位于数组中间的数字一定就是所求的目标数字。即长度为 nnn...
4.8k 4 分钟

# 面试题 35:复杂链表的复制 # 题目 请实现函数 ComplexListNode *clone(ComplexListNode *pHead) ,复制一个复杂链表。在复杂链表中,每个节点除了有一个 m_next 指针指向下一个节点,还有一个 m_sibling 指针指向链表中的任意点或者 nullptr 。节点的 C++ 定义如下: struct ComplexListNode { int m_value; ComplexListNode *m_next; ComplexListNode...
9.6k 9 分钟

# 面试题 27:二叉树的镜像 # 题目 请完成一个函数,输入一棵二叉树,该函数输出它的镜像。二叉树节点的定义如下: struct BinaryTreeNode { int m_value; BinaryTreeNode *m_left; BinaryTreeNode *m_right;}#...
3.8k 3 分钟

# 面试题 22:链表倒数第 kkk 个节点 # 题目 输入一个链表,输出该链表中倒数第 kkk 个节点。为了符合大多数人的习惯,本题从 111 幵始计数,即链表的尾节点是倒数第 111 个节点。例如,一个链表有 666 个节点,从头节点开始,它们的值依次是 111、222、333、444、555、666。这个链表的倒数第 333 个节点是值为 444 的节点。链表节点定义如下: struct ListNode { int m_value; ListNode *m_next;};# 思路 假设整个链表有 nnn 个节点,那么倒数第 kkk...