[題解] UVa 12356 - Army Buddies
Tags
- 題解
- UVa
- D難度
略譯
給你 n 個士兵,排成一個橫列,士兵死了隊列會靠攏繼續前進,
每個士兵有一個 ID,一開始從最左ID 1 依序排到最右ID n,
給你 m 組死亡報告,每組 i, j 表示士兵ID i 到 j 全死了
對於每組報告,回答死掉的 i 到 j 左邊和右邊士兵各是誰
題解
暴力在陣列上做刪除後靠攏會 TLE
Linked List在搜尋目標士兵 ID 太慢,最糟情況從最右刪回來,
可以劣化到 nm 的複雜度
結合 Linked List 刪除的概念、陣列的搜尋
用陣列存每個士兵的左邊和右邊各是誰
每次刪除可以直接找到被殺的最左士兵和最右士兵
馬上知道最左士兵的左邊,和最右士兵的右邊是誰
然後將他們左邊連到右邊、右邊連到左邊
每一步都是 O(1) 直接解決
總複雜度為 n+m
實作提示
- 左右各留一格,就無須判斷邊界
cmusu