生词本

anagram

字母异位词。把一个单词的字母重新排列,组成另一个单词。两个字符串字符种类和数量完全相同,只是顺序不同。

经典例子:

  • listen → silent
  • dormitory → dirty room
  • cinema → iceman

indices

index 的复数形式。索引。在算法题中常见,如 “return the indices of two elements”(返回两个元素的索引)。

lexicographical

字典序的。按字典排列顺序比较字符串,逐字符从左到右比较。如 “ad” < “ae” < “af” < “bd”。算法题中常见 “return in lexicographical order”(按字典序返回)。

combinations

组合。从一组元素中选取若干个形成的结果。算法题中常见 “letter combinations”(字母组合)、“all possible combinations”(所有可能的组合)。数学符号 C(n,k)。

exceed

超过。算法题中常见 “if the sum exceeds the budget”(如果总和超过预算)、“exceeds the limit”(超过限制)。

bound

边界、界限。算法题中常见 “bounded maximum”(有界最大值)、“upper bound”(上界)、“lower bound”(下界)、“out of bounds”(越界)。

intermediate

中间的、中级的。算法平台上指中等难度,比 Easy 难比 Hard 简单。LeetCode 也用这个词标 Medium。

bidirectional

双向的。在图论中指边可以两个方向通行,A→B 和 B→A 都可以走。算法题中常见 “bidirectional graph”(无向图)、“bidirectional search”(双向搜索)。

isolated

孤立的、隔离的。图论中指没有边连接的节点,isolated node(孤立节点),不与任何其他节点相连。

constraints

约束、限制条件。算法题中规定输入范围和特殊条件的部分,如 “0 <= n <= 1000”、“the list is sorted in non-decreasing order”。面试时先看 Constraints 能判断用什么算法(如 n<=20 可以回溯,n<=1000 可以 O(n²),n<=10^5 需要 O(n log n))。

considered

被考虑的、被算作的。算法题中常见 “two nodes are considered connected if…”(如果…则两个节点被视为连通的),用来定义什么条件算作满足某关系。

hallucinations

幻觉。在 AI 领域指 LLM 生成看似合理但实际不正确的内容。比如编造不存在的 API、引用不存在的论文、给出错误的代码。是 RAG 要解决的核心问题之一:用检索到的真实文档约束 LLM 的输出,减少幻觉。

multiset

多重集。和集合(set)的区别是允许重复元素。比如 {1,1,2,3} 是多重集但不是集合(集合不允许重复)。算法题中 “same multiset of values” 指两棵树包含完全相同的值(包括重复值的出现次数也相同)。

BST

Binary Search Tree,二叉搜索树。左子树所有值 <= 节点值 <= 右子树所有值。中序遍历 BST 得到升序序列。查找/插入/删除都是 O(log n)(平衡情况下)。

binary

二进制的、由两部分组成的。binary tree(二叉树,每个节点最多两个子节点)、binary search(二分查找,每次分成两半)、binary number(二进制数,只有 0 和 1)。核心含义是”二”。注意不要和 bare(裸露的)混淆。

algorithms

算法。解决问题的步骤和方法。计算机科学的核心领域,研究如何高效地处理数据。算法题分类如:排序算法、搜索算法、贪心算法、动态规划、回溯算法、图论算法等。HackerRank 和 LeetCode 的题目分类就叫 Algorithms。

recruiter

招聘人员、猎头。在企业招聘流程中负责筛选简历、安排面试、沟通 offer 的角色。求职时常说的”HR 联系我”里的 HR 很多时候就是 recruiter。

arithmetic

算术的、等差的。算法题中 “arithmetic progression” 指等差数列(相邻两项差值固定),如 [1,3,5,7,9] 是公差为 2 的等差数列。arith-met-ic,注意发音和拼写,容易拼错。

progression

数列、序列。数学中 “arithmetic progression” = 等差数列,“geometric progression” = 等比数列。算法题里见到 progression 就理解为”按某种规律排列的数列”。

词根分析:来自拉丁语 progredi(向前走)。pro-(向前)+ gradi(走)。同词根家族:

  • progress:进步(向前走的动作)
  • progression:数列(按规律排列,比 progress 多了”规律性”)
  • process:过程(一步步走的流程)

前缀 pro- = 向前,如 proceed(继续前进)、promote(提升)。

bitonic

双调的、先增后减的。bitonic array 指一个先严格递增再严格递减的数组,形状像一个山峰。

词根分析:bi-(两个)+ tonic(tone,音调/模式)。字面意思”有两种模式”——先升后降。前缀 bi- = 二,如 binary(二进制)、bicycle(自行车)、bilingual(双语)。

strictly

严格地。数学和算法中 “strictly increasing” 指严格递增(每个元素比前一个大,不能相等),“strictly decreasing” 指严格递减。不加 strictly 就允许相等(如 1,1,2 算非严格递增)。

词根分析:strict(严格的)+ -ly(副词后缀)。strict 来自拉丁语 stringere(拉紧),同词根:restrict(限制,re- 向后 + stringere)、constrain(约束)、stringent(严格的)。后缀 -ly 将形容词变副词,如 quick → quickly、simple → simply。

distinct

不同的、不重复的。“distinct letters” 指不重复的字母,“all distinct” 指全部互不相同。算法题中常见 “find the longest substring with all distinct characters”(找最长无重复字符子串)。

词根分析:来自拉丁语 distinctus,过去分词形式。dis-(分开)+ stinguere(刺/标记)。字面意思”标记开来的”→“不同的”。同词根家族:

  • distinguish:区分(dis- 分开 + stinguere 标记)
  • distinguishable:可区分的
  • extinguish:熄灭(ex- 出 + stinguere,把标记擦掉)
  • instinct:本能(in- 内部 + stinct,内在的标记)

前缀 dis- = 分开、分离,如 disconnect(断开)、disagree(不同意)。

cooldown

冷却时间。在任务调度中指同一资源执行相同操作后需要等待的时间间隔。类似游戏中的技能冷却:用了一次技能,要等 k 秒才能再用。

词根分析:cool(冷却)+ down(向下)。cool 来自古英语 cōl(凉),与 cold 同源。down 表示状态转变的方向。组合起来”温度降下来”→ 引申为”等待恢复的时间”。

parallel

并行的、同时进行的。在任务调度中 “process m tasks in parallel” 指同一时间单位内最多同时处理 m 个任务。数学中 parallel lines 指平行线。

词根分析:来自希腊语 parallēlos。para-(旁边)+ allēlos(彼此)。字面意思”在彼此旁边”→“平行的”。前缀 para- = 旁边、平行,如 paragraph(段落,para 旁 + graph 写)、paramedic(急救员,旁 + medical 医疗)、paradox(悖论,para 旁 + dox 意见)。

triplets

三元组、三个一组。算法题中 “find all triplets that sum to zero” 指找出所有三个数的组合使其和为零。triplet 是 triple 的名词形式,表示”三个一组的东西”。

词根分析:tri-(三)+ -plet(倍数后缀,来自拉丁语 -plus)。前缀 tri- = 三,如 triangle(三角形)、triple(三倍)、trillion(万亿)。后缀 -plet 表示”倍”,如 doublet(成对)、quadruplet(四胞胎)。

revenue

收入、收益。在算法题中指物品或服务的经济价值。这道题里每个视频流的 revenue 就是它产生的收入。

词根分析:来自古法语 revenu,过去分词形式。re-(回)+ venir(来)。字面意思”回来的东西”→“回到手里的钱”→“收入”。同词根家族:

  • revenu 是 revenir(回来)的过去分词
  • avenue:大道(a- 朝向 + venir 来,“通向某处的路”)
  • convene:集会(con- 共同 + venir 来)
  • intervene:干预(inter- 之间 + venir 来)

前缀 re- = 回、再,如 return(返回)、recall(回忆)。

densities

密度。在算法题中指”性价比”——单位体积的价值。这里 density = revenue / size,即每 MB 的收入。density 的单数形式是 density。

词根分析:来自拉丁语 densitas。densus(密集的)+ -ity(名词后缀,表示状态或性质)。字面意思”密集的程度”。同词根:

  • dense:密集的
  • condense:浓缩(con- 共同 + dense,使变密集)
  • densify:致密化

后缀 -ity = 状态、性质,将形容词变名词,如 density(密度)、velocity(速度)、complexity(复杂度)。

mutates

变异、改变。在编程中指”修改原对象”而非返回新对象。JavaScript 中 array.reverse()array.sort() 会 mutate 原数组,[...array].reverse() 不会。在 React 和函数式编程中通常避免 mutation。

词根分析:来自拉丁语 mutare(改变)。同词根家族:

  • mutate:变异、改变
  • mutation:突变(生物学用语)
  • mutable:可变的(如 Python 的 mutable/immutable 类型)
  • immutable:不可变的(im- 不 + mutable)
  • commute:通勤(com- 交换 + mut 改变,“交换位置”)
  • permutation:排列(per- 彻底 + mut 改变,“完全改变顺序”)

前缀 im- = 不、否定,是 in- 在 m 前的变体,如 impossible(不可能)、immature(不成熟)。

fraction

分数、部分。算法题中 “fractional revenue” 指按比例计算的收入(取了部分物品,收入按比例分配)。这道题里取了 2/3 的流,收入就是 revenue × (2/3)。

词根分析:来自拉丁语 fractio(破碎)。frangere(打破)的过去分词 fractus。字面意思”打碎的部分”。同词根家族:

  • fracture:骨折、断裂(打破骨头)
  • fraction:分数(打碎成部分)
  • refract:折射(光”打破”方向)
  • fragment:碎片(frag 破碎 + ment 名词后缀)
  • fragile:易碎的(frag 破碎 + ile 易…的)

后缀 -ile = 易于…的,如 fragile(易碎的)、agile(敏捷的)、volatile(易挥发的)。

subsequence

子序列。不要求连续,只要求元素顺序与原序列一致。如 [2, 5, 7] 是 [10, 9, 2, 5, 3, 7, 101] 的子序列(跳过了 10、9、3)。区别于 substring(子串,必须连续)。

词根分析:前缀 sub-(在…之下、次于)+ sequence(序列)。sub- = 之下、子、亚,如 submarine(潜水艇,sub + marine 海洋)、subset(子集)、subzero(零下)。sequence 来自拉丁语 sequi(跟随),如 consequence(后果,con + sequi 一起跟随)。

prioritize

优先考虑、给…优先权。算法题中 “prioritize the one that appears first” 指频率相同时优先选首次出现更早的元素。

词根分析:来自 priority(优先)+ -ize(动词后缀,使…化)。priority 来自拉丁语 prior(在前的、更早的),如 prior(先前的)、priority(优先权)、prioritize(优先处理)。后缀 -ize = 使…化,如 modernize(现代化)、organize(组织)、optimize(优化)。

preservation

保存、保留。题目中 “order preservation” 指保持原始顺序——频率相同时按原数组中的出现顺序排列。

词根分析:来自拉丁语 praeservare(保护、保存)。prae-(在前面)+ servare(保持、守护)。前缀 prae- = 在前,如 preserve(保存)、preview(预览)、prevent(预防,prae + venire 到来之前)。词根 servare = 保持/守护,如 conserve(保存)、reserve(保留)、observe(观察,ob- 向 + servare 看守)、deserve(应得,de- 完全 + servare 服务)。

concurrent

并发的、同时发生的。算法题中 “peak concurrent sessions” 指同一时刻在线的会话数峰值。编程中 “concurrent programming” 指并发编程。

词根分析:来自拉丁语 concurrere(一起跑、同时发生)。con-(一起)+ currere(跑)。前缀 con- = 一起、共同,如 connect(连接)、consensus(共识)、collaborate(协作,con 的变体 col)。词根 currere = 跑,如 current(当前的/水流,跑着的东西)、course(路线,跑的路径)、occurrence(发生,ob- 向 + 跑过来)、incur(招致,in + 跑进来)。

chronological

按时间顺序排列的。算法题中 “process events in chronological order” 指按时间戳从早到晚处理事件。

词根分析:来自希腊语 khronos(时间)+ logos(学说、顺序)。chrono- = 时间,如 chronicle(编年史)、synchronize(同步,syn- 共同 + chrono 时间)、chronology(年表)。后缀 -logical 来自 logos(言语、学说),如 biological(生物学的)、psychological(心理学的)。前缀 chrono- 在技术文档中常见:synchronous(同步的)、asynchronous(异步的,a- 不 + 同步)。

maintain

维持、保持。题目中 “maintain FIFO order” 指保持先进先出的顺序。编程中 “maintain state” 指维护状态。

词根分析:来自拉丁语 manu tenere(用手握住)。manus(手)+ tenere(握住、保持)。前缀 main- = 手(来自 manus),如 manual(手工的)、manufacture(制造,手 + 做)、manage(管理)。词根 tenere = 握住、保持,如 contain(包含,con + 握住)、retain(保留,re + 握住)、sustain(维持,sus 下面 + 握住)、obtain(获得,ob 向 + 握住)。

histogram

柱状图、直方图。算法题中 “max area under histogram” 指柱状图中最大的矩形面积。每个柱子宽度为 1,高度由数组值决定。

词根分析:来自希腊语 histos(柱、网)+ gramma(记录、画)。histo- = 柱/组织,如 histology(组织学,研究生物组织的微观结构)。后缀 -gram = 记录、画出来的东西,来自希腊语 gramma,如 program(程序,pro 前 + gram 写)、telegram(电报,tele 远 + gram)、diagram(图解)。

recursion

递归。函数调用自身来解决问题。中序遍历中”先递归左子树,再读根,再递归右子树”就是递归结构。

词根分析:来自拉丁语 recurrere(往回跑)。前缀 re-(回、再)+ currere(跑)。re- = 回、再、重新,如 return(返回)、retry(重试)、rebuild(重建)、recall(回忆,re + 呼唤回来)。词根 currere = 跑,如 current(当前的/水流,跑着的东西)、course(路线)、concurrent(并发的,con 一起 + 跑)、incur(招致,in + 跑进来)。recursion 字面意思”跑回去”——函数跑回自己。

alternating

交替的、轮流出现的。算法题中 “alternating binary string” 指相邻字符不同的二进制串,如 0101 或 1010。

词根分析:来自拉丁语 alternare(交替)。alter(另一个)+ -nate(动词后缀)。字面意思”在两个之间切换”。同词根家族:

  • alternate:交替(动词/形容词)
  • alternative:替代的、备选的
  • alter:改变(取”变成另一个”之意)
  • altercation:争吵(言语上”交替”攻击)

词根 alter = 另一个、改变,如 altercation(争吵,互相”改口”)。后缀 -ing = 正在进行中的,如 alternating(正在交替的)。

palindrome

回文。正着读和反着读都一样的字符串或数字。如 “racecar”、“121”。算法题中常见 “valid palindrome”(验证回文)、“longest palindromic substring”(最长回文子串)。

词根分析:来自希腊语 palin(再、回)+ dromos(跑、路)。字面意思”跑回来的路”→“正着走和反着走是同一条路”。同词根:

  • palindrome:回文(palin 回 + drom 跑)
  • dromedary:单峰驼(“跑得快的骆驼”)
  • syndrome:综合征(syn- 共同 + drom 跑,“一起跑出来的症状”)

case-insensitive

大小写不敏感的。比较字符串时不区分大小写,“ABC” 和 “abc” 视为相同。对应 case-sensitive(大小写敏感的,区分大小写)。

sequence

序列。按顺序排列的一组元素。算法题中常见 “find the longest sequence”(找最长序列)、“arithmetic sequence”(等差序列)。

symbols

符号。算法题中指非字母数字的字符,如 +-*& 等。

digits

数字(0-9)。算法题中常见 “sum of digits”(数字之和)、“digits of a number”(一个数的各位数字)。注意和 numbers(数)的区别:digits 是单个数字字符,numbers 是完整的数值。

non-identical

不完全相同的、不恒等的。算法题中 “non-identical” 指两个对象虽然相似但有差异。non-trivial 也常出现,指”非平凡的”(有实际意义的,不是显然的)。

positive integer

正整数。大于零的整数(1, 2, 3…)。negative integer 是负整数(-1, -2, -3…)。算法题中常见 “given a positive integer n”。

denote

表示、表明。算法题中常见 “n denotes the length of the array”(n 表示数组长度)、“denoted as”(表示为)。正式用语,和 represent、indicate 近义。

词根分析:来自拉丁语 denotare。de-(向下、完全)+ notare(标记)。字面意思”完全标记出来”→“明确表示”。同词根:notation(记号)、note(笔记)、notable(值得注意的)、connotation(隐含意义)。