← 返回博客列表
OpenAI

OpenAI Coding 高頻題:衝突對限制下的合法連續區間計數,為什麼 O(n²) 一定過不了?

2026-04-07

OpenAI Coding Problem

OpenAI 的 coding 面試裡也很常見一類題,表面看很像普通區間枚舉,但只要真的按所有子陣列去掃,時間複雜度會立刻爆掉。這道題就是很典型的代表。

題目給你 1...nn 個元素,再給一批衝突對 (a, b)。如果某個連續區間裡同時包含 ab,那這個區間就不合法。問題是:一共有多少個非空連續區間是合法的?

單點區間允許,空區間不允許。

這題最容易走偏的方向,就是把它當成「枚舉所有 [l, r] 再檢查是否合法」。但只要 n 到了 10^5O(n²) 幾乎沒有通過的可能。


先看例子,為什麼這題本質不是暴力判定

假設:

也就是衝突對有兩組:

合法區間包括:

這個例子裡最關鍵的觀察不是「哪些區間合法」,而是:

對每個固定的右端點 r,最左可以從哪裡開始,才能保證 [l, r] 合法?

只要這個最左邊界知道了,以 r 結尾的合法區間數就能立刻算出來。


這題真正要算的是:每一列的最左合法起點

把每個右端點 r 想成一列。

如果你知道對這個 r 來說,最左合法起點是 left[r],那麼所有合法區間就是:

所以以 r 結尾的合法區間數就是:

r - left[r] + 1

整題答案就是把所有右端點的這一項加總。

也就是說,問題已經從「統計所有合法區間」被改寫成了:

如何快速求出每個右端點對應的最左合法起點?

這一步一旦看懂,題目就會從區間枚舉題變成線性掃描題。


第一步:先記錄每個點左邊最大的衝突位置

對每一對衝突 (a, b),先整理成 a < b

如果把 b 看成右端點,那只要一個區間同時包含 ab,它就非法。這代表:

當右端點來到 b 時,左邊界就不能再放到 a 或更左,否則 ab 會同時被包含進來。

因此,對每個位置 b,我們只需要關心:

在它左邊,最大的那個與它衝突的點是誰?

為什麼只看最大的那個?

因為它帶來最強的限制。比它更小的衝突點,不會把左邊界推得更靠右。

在上面的例子裡,我們會得到:

這一步可以用陣列或哈希表維護,每條衝突邊只需處理一次。


第二步:為什麼「當前衝突點 + 1」還是不夠

很多人走到這裡,會覺得答案已經出來了:

如果右端點是 r,那最左合法起點不就是「最大衝突點 + 1」嗎?

這個想法只對了一半。

問題在於,右端點往右移動時,前面已經形成的限制不會消失。

還是同樣的例子:

這說明右端點來到 4 時,左邊界限制至少要維持前一列的水準,不能因為「當前點沒有衝突」就往回退。

所以真正的轉移關係是:

當前列的限制 = 當前新增限制 和 前一列限制 中的較大者

本質上,這就是一個前綴最大值傳播。


正確的核心轉移

bad[r] 表示:當右端點是 r 時,左邊最大的衝突位置。

那真正有效的限制不是原始的 bad[r],而是它的前綴最大值。

因為所有更早出現過的衝突約束,都會持續影響後面所有右端點。

於是從左到右掃一遍時:

這裡之所以不是再多一個 +1,是因為:

這就是整題可以線性計數的根源。


為什麼這題可以做到線性

整個流程其實非常緊湊:

  1. 掃一遍所有衝突對,把每個右端點的「左側最大衝突點」記下來
  2. 再從 1n 做一次前綴最大值傳播
  3. 順手累加每個右端點的合法區間貢獻

如果衝突對數量記為 m,總複雜度就是:

這也是它在 n = 10^5 級別下仍然能穩定通過的原因。


這題最容易錯的地方

1. 把它寫成區間暴力枚舉

這是最直接的超時來源。

只要你還在想「固定左端點,再往右擴」,基本上就已經偏離正解方向了。這題真正該固定的是右端點,而不是逐個驗證區間本身。

2. 只看當前位置的新衝突,不繼承前面的限制

這是最常見的邏輯 bug。

很多同學能想到給每個 b 記錄一個最大的 a,但沒有意識到舊限制會持續影響後面所有位置,於是答案會在某些列被多算。

3. 沒有先統一成 a < b

衝突對本身沒有方向,但在這題裡我們討論的是「右端點的左側最大限制」,所以一定要先把每條邊標準化成左小右大,後面才能統一處理。

4. 最後數貢獻時下標關係寫錯

這類題最後最容易不是模型錯,而是:

只要這裡沒有扣清楚,很容易多一個或少一個。


OpenAI 在這題裡真正考什麼

這題看起來像計數題,但本質上在考的是:

這正是 OpenAI coding 題裡也很常見的風格:

只要抓住這一點,這類題通常就會順很多。


📌 最後總結

這道題最值得記住的,不是某個模板,而是這個轉化過程:

一旦這樣看,整題就能從 O(n²) 直接降到 O(n + m)

如果你最近在準備 OpenAI coding 面試,這類「把區間合法性改寫成邊界遞推」的題型非常值得單獨練熟。很多時候,真正的門檻不是實作,而是你有沒有及時看出該固定哪一端。


🚀 oavoservice:你的 OpenAI Coding 面試穩過保障

面對 OpenAI 這種表面是區間題、實際考建模與複雜度控制的 coding 面試,你需要的不只是一份答案,而是一個專業的技術團隊支持。

我們提供:

HackerRank 滿分代寫 — 高頻題庫持續覆蓋
程式碼符合工業級規範 — 邏輯清楚,邊界完整
即時場外助攻 — 無痕輔助,不干擾正常操作
7x24 小時在線 — 隨時待命

不要讓一道複雜度看錯的 coding 題,影響你衝 OpenAI 的機會。

We consistently provide professional coding interview support services for major tech companies like OpenAI, Google, TikTok, and Amazon. Feel free to contact us if you're interested.

👉 立即添加微信:Coding0201

幫你把 OpenAI coding 這一輪穩住。

Telegram: @OAVOProxy
Gmail: [email protected]