1.2k1 分钟

# 说明 本文是关于《编程珠玑》这本书籍的相关文章的说明。接下来的时间内我将会用一系列文章记录阅读《编程珠玑》这本书时的相关笔记,如果按照保守估计,一个章节一篇博客来计算的话,至少也是十五篇文章的内容了。当然,实际上可能会更多就是了。 这本书买了也有一段时间了,只是一直没能找到比较好的时间进行仔细地阅读。想了想今后的安排,还是决定慢慢地开始,一点一点地记录相关的内容吧,否则反倒是一直不能开始,也就辜负了书中的内容了。 # 关于本书 # 前言 本书作者 Jon Bentley 是美国著名的程序员和计算机科学家,他于 20 世纪 70 年代前后在很有影响力的《ACM 通讯》(Communicati
1.9k2 分钟

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

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

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

# 面试题 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 <
4.4k4 分钟

# 面试题 49:丑数 # 题目 我们把只包含因子 222、333 和 555 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 150015001500 个丑数。例如,666、888 都是丑数,但 141414 不是,因为它包含因子 777。习惯上把 111 当作第一个丑数。 # 思路 比较直观的做法是从 111 开始,判断一个数是否是丑数,直到找到第 150015001500 个丑数,但是这样的做法效率不高。 换一种思路。丑数的因子只有 222、333 和 555 这三种,对于任意一个丑数,可以分解成只包含这些因子的式子。对于每个因子,使用一个计数值来表示该因子的个数。那么对
13k12 分钟

# 面试题 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 的
3.6k3 分钟

# 前言 B 站今天上线了岩井俊二的《情书》,今年不久前内地也重映过,趁着机会补上了很久之前就在计划中的这部影片。以前总是冲着某个宣传去看一部电影,现在更喜欢像这样在某段闲暇时间,在某个契机之下,一个人静静地,关掉弹幕,阅读一个新的故事。 《情书》在中国观众之中算是知名度非常高的电影了,作为岩井俊二的处女座,具有极高的水准。我并不知晓太多电影理论的内容,但是就个人的观感而言,电影的镜头非常的干净。尽管电影的节奏在大部分时间是舒缓的,却并没有给人以冗长之感。娓娓道来却又引人入胜。 情书的两大主题应该算是爱情和生死,这应该属于艺术作品中最重要的几个母题了。在影片中,这两个主题互相交织,贯穿始终。
5.7k5 分钟

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

# 面试题 27:二叉树的镜像 # 题目 请完成一个函数,输入一棵二叉树,该函数输出它的镜像。二叉树节点的定义如下: struct BinaryTreeNode { int m_value; BinaryTreeNode *m_left; BinaryTreeNode *m_right;}# 思路 通过图像可以看到,互为镜像的两个二叉树的根节点相同,但它们的左、右两个子节点位置相反。对于接下来的节点,依然继续上述的交换过程。 通过总结,我们得出求一棵树的镜像的过程:先前序遍历这棵树的每个节点,如果遍历到的节点有子节点,就交换它的两个子节点。当交换完所有非