最近做了一套 Rubrik 的 SDE Intern Online Assessment。整體風格偏工程邏輯,不是那種特別燒腦的演算法題,但對思路清晰度和實現細節要求很高。下面把兩道題用段落形式整理一下。
第一題:Capable Models
題目給你 n 個 machine learning models。每個 model 有一個 cost[i],同時有一個長度為 2 的二進位制字串 featureAvailability[i],用來表示這個模型支援哪些 feature。
如果字串是 “00”,表示既不支援 A 也不支援 B;
“01” 表示只支援 feature A;
“10” 表示只支援 feature B;
“11” 表示同時支援 A 和 B。
題目定義一個集合是 k-capable,當且僅當這個集合裡至少有 k 個模型支援 feature A,並且至少有 k 個模型支援 feature B。
要求對於每一個 k(從 1 到 n),分別計算出一個滿足條件的集合,使得總 cost 最小。如果某個 k 無法滿足條件,則返回 -1。
這題的關鍵在於理解 “11” 這一類模型可以同時貢獻 A 和 B,因此在選取時具有雙重價值。核心做法是將模型分為三類:onlyA、onlyB 和 both,分別按 cost 升序排序。對於某個固定的 k,可以列舉選多少個 both,然後再補齊剩餘需要的 onlyA 和 onlyB 數量,利用字首和快速計算成本,取最小值即可。
第二題:String Subsequences
這題給兩個字串 s1 和 s2,其中 s1 的長度固定為 3,s2 長度不定。
要求統計 s1 作為一個子序列,在 s2 中一共出現多少次。這裡的子序列要求字元順序一致,但可以不連續。
例如:
s1 = “ABC”
s2 = “ABCBABC”
輸出是 5。
也就是說,在 s2 中有 5 種不同的方式可以按順序選出 A、B、C。
這道題本質是子序列計數問題。因為 s1 長度固定為 3,可以用三個變數滾動統計:第一個字元的匹配次數、前兩個字元的匹配次數、完整三個字元的匹配次數。遍歷 s2 時,根據當前字元更新對應計數即可,時間複雜度 O(n),空間 O(1)。
References
ProgramHelp 專注於提供全流程求職輔助支援,包括 OA線上輔助 、技術面/VO 實時助攻,以及高強度崗位的專項模擬訓練,幫助你在關鍵環節穩住節奏、提升透過率。
無論是 HackerRank、CodeSignal 這類線上筆試,還是後續技術面、系統設計、行為面準備,我們都可以根據目標公司定製訓練方案,針對高頻題型做強化拆解,幫助你把思路講清楚、程式碼寫穩定,在面試中發揮出真正水平。