NVIDIA OA Question 高頻真題覆盤|今年這幾類題真的反覆考

最近我們團隊幫幾位同學做了幾場 NVIDIA 的 OA 和 Coding 面試,真實遇到下面這幾道題的機率非常高,尤其是 AI Engineer、CUDA 相關開發和系統軟體崗位。NVIDIA 的 coding 題越來越注重位運算最佳化、數學列舉和高效資料結構,下面直接分享 5 道高頻 NVIDIA OA Question ,建議大家重點刷這幾道,基本能覆蓋最近的 OA 和 Onsite Coding。

NVIDIA OA Question 高頻真題覆盤|今年這幾類題真的反覆考

題目 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
  • 引數:addr1addr2(整數,32 位地址)
  • 返回值:同頁返回 true/1,不同頁返回 false/0

核心思路:

  • 去掉地址的低 12 位(頁內偏移)
  • 比較頁號是否一致
(addr1 & ~0xFFF) == (addr2 & ~0xFFF)

本質:位運算 + 記憶體對齊知識

題目 4:生成指定位掩碼(BitMask)

題目描述

需求:編寫函式,輸入兩個整數 hi(高位)、lo(低位),生成 32 位系統下的位掩碼(二進位制中 lohi 位為 1,其餘為 0),並以字串形式返回(如 0x7 表示二進位制 111)。

示例:輸入 hi=2lo=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
  • 最優操作步驟:
    1. 選 20 → 得分 + 20,20 變為 ⌈20/3⌉=7
    2. 選 7 → 得分 + 7,7 變為 ⌈7/3⌉=3
    3. 選 4 → 得分 + 4,4 變為 ⌈4/3⌉=2
    4. 選 9 → 得分 + 9,9 變為 ⌈9/3⌉=3
  • 最終得分:20+7+4+9=40

樣例輸入輸出

  • 輸入:n=4,arr=[4,5,18,1],k=3
  • 最優步驟:
    1. 選 5 → 得分 = 5,5 變為 ⌈5/3⌉=2
    2. 選 18 → 得分 = 5+18=23,18 變為 ⌈18/3⌉=6
    3. 選 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!

END
 0