前幾天剛做完 Microsoft 26NG OA,整個體驗非常順,總共兩題,總時長 20 分鐘左右就提交完畢。整體難度中等、思緒明確、沒有太多坑點,屬於微軟一貫的風格:重視思維清晰、程式碼乾淨,而不是故意刁難
因為從八月到現在已經做了上百場各大廠的 OA(Microsoft、Google、Amazon、TikTok、Meta 都掃了一輪),這次微軟 OA 基本上屬於「看一眼就知道怎麼寫」的類型。這裡把題目整理出來,同時寫寫自己的思路,給還在準備的同學做個參考。
Q1 — Maximize Sum by Choosing from Two Arrays
Problem
Given two arrays r1 and r2 of the same length n, you must choose exactly k elements from r1 and n - k elements from r2.
At position i, you may choose either r1[i] or r2[i], but not both.
Return the maximum possible total sum.
思路分析
這題其實就是非常經典的「增益選擇」(gain selection)問題,貪心直接秒。
我的做法很簡單也很穩定:
- 先假設所有位置都選擇 r2
- 因為 r2 選了
n-k個,但我們先全選,後面再替換掉 k 個即可 - 初始和 =
sum(r2)。
- 因為 r2 選了
- 計算每個位置的“換成 r1 的收益”
gain[i] = r1[i] - r2[i]
- gain 越大,表示越該選 r1。
- 對 gain 從大到小排序,選出前 k 個增益
- 答案= sum(r2) + 前 k 大的 gain 和
為什麼這個貪心是最優的?
因為每個位置只有兩種選法,且完全獨立,所以最大化總和就是最大化局部的增益,而增益排序是唯一合理的策略。
這題基本上屬於微軟 OA 的典型風格:
不難,但一定要寫得乾淨、邏輯清楚
Q2 — Minimum Edits to Form the Lexicographically Smallest Palindrome
Problem
Given a string s, you are allowed to modify characters.
You want to make the string rearrangeable into a palindrome.
Among all solutions that require the minimum number of edits, return the lexicographically smallest possible palindrome.
關鍵點拆解
想要一個字串能重排成回文,有一個鐵律:
最多只能有一個字元出現奇數次。
所以問題變成了兩步:
- 最少修改 → 盡可能把 odd count 的字元變成 even
- 字典序最小 → 構造回文時盡量把小字放在左半邊
具體做法
① 統計頻次,處理 odd 次數
- 數所有字元頻次
- 把所有 odd 次數字元找出來
- 每一次修改可以讓兩個 odd → even
→ 因此修改次數最小 =odd_count / 2
為了讓最後的回文字典序盡量小,我會優先把大的 odd 字元向小的 odd 字元靠攏,這樣頻次處理和字典序優化能同時完成
② 建構字典序最小的回文
在頻次調整好後,構造方法就很自然了:
- 左半部:依照從小到大填(例如'a' → 'z')
- 中心字符:如果有 odd,就放出現次數最小的那個 odd 字符
- 右半部:把左半部反寫
整體就能保證是最少修改方案中的字典序最小解。
微軟 26NG OA 的整體感受
這次 OA 還原了微軟一貫的考察重點:
- 清晰的邏輯推導
- 資料結構基礎(陣列、頻次統計、排序)
- 程式碼風格與細節處理
- 不靠炫技,勝在穩定
沒有任何刁鑽的 test case,也沒有特別複雜的 corner case
只要想清楚邏輯,就能直接 AC
兩題我差不多 20 分鐘搞定,每題 5~10 分鐘的節奏。
如果你也在準備 Microsoft / Amazon / Google 的校招 OA
Programhelp 專注於各大廠 OA 的技術支援服務,針對 HackerRank、CodeSignal 等線上評測平台,提供以下協助內容:
- 線上評測代碼協助與實現:涵蓋數組、字串、模擬、構造、貪心、圖論、DP 等主流題型
- 確保所有測試用例通過:以可運行、可維護的程式碼為目標
- 結果導向,不成功不收費
- 多語言支援:Java / Python / C++
整個流程透過 ToDesk 等遠端協作工具完成,介面無痕,操作自然,不影響正常提交體驗,適用於 CodeSignal、HackerRank、Codility 等平台的各類程式設計測試。
我們長期累積了大量主流大廠(Microsoft / Google / Amazon / TikTok / Meta)的 OA 題型與評分機制理解,也熟悉不同平台的運作環境差異,能幫助考生在緊張時間內保持穩定發揮。