最近我们团队帮几位同学做了几场 NVIDIA 的 OA 和 Coding 面试,真实遇到下面这几道题的概率非常高,尤其是 AI Engineer、CUDA 相关开发和系统软件岗位。NVIDIA 的 coding 题越来越注重位运算优化、数学枚举和高效数据结构,下面直接分享 5 道高频 NVIDIA OA Question ,建议大家重点刷这几道,基本能覆盖最近的 OA 和 Onsite Coding。

题目 1:理想数(Ideal Number)统计
题目描述
理想数定义:正整数的质因数仅包含 3 和 5,可表示为 3x×5y(x,y 为非负整数),例如 15、45、75 是理想数,而 6、10、21 不是。
需求:给定范围 [low,high],统计该范围内理想数的个数。
示例:范围 [200,405] 内有 4 个理想数:32×52=225、35×50=243、31×53=375、34×51=405。
函数要求
- 函数名:
getIdealNums - 参数:
low(范围下限,包含)、high(范围上限,包含),均为整数 - 返回值:范围内理想数的个数(整数)
核心思路:
已经知道理想数是3^x*5^y次了,因为3^x和5^y次,这里的次数最多log种,暴力枚举多少个3和多少个5相乘即可,然后判断是否在这个区间里面,是就累加。
题目 2:由前缀异或数组还原原数组
题目描述
前缀异或定义:对于非负整数数组 arr[n],位置 i 的前缀异或 pref[i] = arr[1] ⊕ arr[2] ⊕ ... ⊕ arr[i](⊕ 为按位异或运算)。
需求:已知前缀异或数组 pref,还原出原始数组 arr。
示例:若 pref = [5, 2, 10],则原数组 arr = [5, 7, 8](推导:arr[1]=pref[1]=5;arr[2]=pref[1]⊕pref[2]=5⊕2=7;arr[3]=pref[2]⊕pref[3]=2⊕10=8)。
样例输入:pref = [2, 2, 5, 6](长度为 4)
函数要求
- 函数名:
getOriginalArray - 参数:
pref(整数数组) - 返回值:还原后的原数组(整数数组)
- 约束:1≤n≤105,0≤pref[i]≤109
核心思路:
给出的式子是序列c,原本的序列是a 给的c1=a1 c2=a1 xor a2 c3=a1 xor a2 xor a3 以此类推,还原原数组就是a1=c1 a2=c1 xor x2=a1 xor a1 xor a2 = a2以此类推 对c数组做前缀异或和,当前做完前缀和后的c数组就是原本的a数组。
题目 3:判断同一 4K 页地址
题目描述
需求:编写函数判断两个 32 位系统下的内存地址是否处于同一个 4K 页边界。4K 页大小为 4096 字节,同一页的地址满足 addr // 4096 结果相同。
示例:输入地址 4095 和 4094,二者同属第 0 页(4095//4096=0、4094//4096=0),输出 true(或 1)。
函数要求
- 函数名:
samePage - 参数:
addr1、addr2(整数,32 位地址) - 返回值:同页返回
true/1,不同页返回false/0
核心思路:
- 去掉地址的低 12 位(页内偏移)
- 比较页号是否一致
(addr1 & ~0xFFF) == (addr2 & ~0xFFF)
本质:位运算 + 内存对齐知识
题目 4:生成指定位掩码(BitMask)
题目描述
需求:编写函数,输入两个整数 hi(高位)、lo(低位),生成 32 位系统下的位掩码(二进制中 lo 到 hi 位为 1,其余为 0),并以字符串形式返回(如 0x7 表示二进制 111)。
示例:输入 hi=2、lo=0,生成掩码二进制为 111,输出字符串 0x7。
函数要求
- 函数名:
SetMask - 参数:
hi(高位,整数)、lo(低位,整数) - 返回值:位掩码的字符串表示(格式如
0x...) - 约束:基于 32 位系统设计掩码
核心思路:
((1 << (hi + 1)) - 1) & ~((1 << lo) - 1)
关键点:
- 前半段:生成 [0, hi] 全 1
- 后半段:去掉 [0, lo-1]
本质:bitmask 构造 + 边界处理
题目 5:最大得分(Maximum Score)
题目描述
给定一个长度为 n 的整数数组 arr,初始得分为 0。在每一步操作中,选择数组中的一个元素,将其值加到得分中,然后将该元素替换为其值的上取整三分之一。
任务是执行 k 次这样的操作,求能获得的最大可能得分。
示例
- 输入:n=5,arr=[20,4,3,1,9],k=4
- 最优操作步骤:
- 选 20 → 得分 + 20,20 变为 ⌈20/3⌉=7
- 选 7 → 得分 + 7,7 变为 ⌈7/3⌉=3
- 选 4 → 得分 + 4,4 变为 ⌈4/3⌉=2
- 选 9 → 得分 + 9,9 变为 ⌈9/3⌉=3
- 最终得分:20+7+4+9=40
样例输入输出
- 输入:n=4,arr=[4,5,18,1],k=3
- 最优步骤:
- 选 5 → 得分 = 5,5 变为 ⌈5/3⌉=2
- 选 18 → 得分 = 5+18=23,18 变为 ⌈18/3⌉=6
- 选 6 → 得分 = 23+6=29,6 变为 ⌈6/3⌉=2
- 输出:29
函数要求
- 函数名:
getMaximumScore - 参数:
arr:整数数组(1≤n≤105,1≤arr[i]≤109)k:操作次数(1≤k≤105)
- 返回值:执行 k 次操作后的最大得分(整数)
核心思路:
- 用 max heap
- 每次取最大 → 更新 → 放回
val = (val + 2) // 3
本质:
- 贪心策略
- 优先队列(heap)
备考 NVIDIA 太杂太乱?一个人扛不住就来找我
有需要这 5 道题的完整 Python / C++ 代码,或者更多 NVIDIA 最近 OA / Onsite 真题(包括系统设计),欢迎直接私信我。我会亲自帮你评估并提供针对性资料。ProgramHelp 持续在帮同学冲 NVIDIA、微软、Google 等大厂,战绩可查。需要 OA 辅助 、VO 思路助攻或全流程支持的同学,随时来找我。
加油!早日拿到 NVIDIA Offer!