最近我們團隊幫幾位同學做了幾場 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!