情境模擬題 隔板的放置方法數 Ways to Divide a Long Corridor_Leetcode #2147

更新於 2024/11/27閱讀時間約 5 分鐘

題目敘述

題目會給我們一個corridor陣列,裡面代表盆栽和座位的分布,P代表Plant盆栽,S代表Seat座位。要求我們依照佈置規則放置隔板,計算總共有幾個合法的隔板分割方法數?

規則:

每兩個座位視為一組,每兩組之間的盆栽所產生的空位,皆可放置一片隔板

每一組分割內必須恰好包含兩個座位,不多也不少。


最後回傳答案之前,記得對109 + 7做除法取餘數。

詳細的題目可在這裡看到


測試範例

Example 1:

raw-image
Input: corridor = "SSPPSPS"
Output: 3
Explanation: There are 3 different ways to divide the corridor.
The black bars in the above image indicate the two room dividers already installed.
Note that in each of the ways, each section has exactly two seats.

Example 2:

raw-image
Input: corridor = "PPSPSP"
Output: 1
Explanation: There is only 1 way to divide the corridor, by not installing any additional dividers.
Installing any would create some section that does not have exactly two seats.

Example 3:

raw-image
Input: corridor = "S"
Output: 0
Explanation: There is no way to divide the corridor because there will always be a section that does not have exactly two seats.

約束條件

Constraints:

  • n == corridor.length
  • 1 <= n <= 10^5
  • corridor[i] is either 'S' or 'P'.

演算法

Seat Seat Plant ... Plant Seat Seat
^ ^ ^ ^

^ : 合法的隔板位置,也是合法的分割位置

依照規則進行模擬每一組內一定恰好包含兩個座位

每一組座位之間的盆栽所產生的空位,皆是合法的分割位置

舉例來說,如果輸入是SSPPPSS,

那麼中間的空格數 = 5 - 1 = 4

= 3個盆栽所產生的空位 = 合法的分割位置總數

= 合法的分割數目


最後,依照排列組合的乘法原理,把每一組座位之間分割方法數相乘

再對109 + 7做除法取餘數,就是最終答案。


程式碼

class Solution:
 def numberOfWays(self, corridor: str) -> int:
  
  # total seat count
  seatCount = 0

  # lastest seat seen before on the left hand side
  lastSeen = -1

  # valid partition
  split = 1

  for i, seat in enumerate(corridor):

   if seat == 'P':
    continue

   seatCount += 1

   # Try to divide on every two seats
   if seatCount >= 2 and seatCount % 2 == 1:
    split *= (i - lastSeen )
    split %= (10**9 + 7)
   
   # update last seen position of seat
   lastSeen = i
  
  if seatCount >= 2 and seatCount % 2 == 0:
   # Valid partition exists only when there are even number of seats
   return split
  
  return 0

複雜度分析

時間複雜度:

O( n ) 依次從左到右的線性掃描,長度為O(n) 和原本的輸入陣列一樣長。

空間複雜度:

O( 1 ) 使用到的是固定大小的臨時變數,尺寸皆為O(1)。


關鍵知識點

關鍵在於經過範例、規則找出規律,任意兩組之間的盆栽空位皆是合法的分割位置

最後,依照題意,依據乘法原理相乘,即可得所有合法分割的方法數。


Reference:

[1] Python O(n) by greedy partition [w/ Comment] - Number of Ways to Divide a Long Corridor - LeetCode

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目敘述 題目會給定一組數字鍵盤,要求我們每次撥號的時候都走象棋的"馬"步,也就是日字型的走法,請問給定長度的n的數字撥號方式有幾種? 最後回傳答案之前,記得對109 + 7做除法取餘數。 詳細的題目可在這裡看到 數字鍵盤的配置如下圖 象棋的"馬"步 日字型走法 示意圖
題目會給我們一個陣列nums,要求我們以每個陣列元素分別當作軸心點,計算差值的絕對值總和,最後以陣列的形式,返回答案。 測試範例 Example 1: Input: nums = [2,3,5] Output: [4,3,5]
題目敘述 題目會給我們一個不規則排列的二維陣列,要求我們列出從起點出發,走次對角線,由左下到右上逐層拜訪的路徑。
題目敘述 題目會給我們一個陣列,要求我們返回 兩數之和=target所在的陣列索引值。 題目還額外保證,一定剛好有一組解。 測試範例 Example 1: Input: nums = [2,7,11,15], target = 9 Output: [0,1]
這題的題目在這裡:Find Pivot Index 題目敘述 題目會給我們一個整數陣列nums,要求我們計算平衡軸心點在哪? 平衡軸心的意思就是軸心點索引左側的元素總合 = 軸心點索引右側的元素總合
題目會給我們一個方陣,要求我們計算兩條對角線的元素總和。
題目敘述 題目會給定一組數字鍵盤,要求我們每次撥號的時候都走象棋的"馬"步,也就是日字型的走法,請問給定長度的n的數字撥號方式有幾種? 最後回傳答案之前,記得對109 + 7做除法取餘數。 詳細的題目可在這裡看到 數字鍵盤的配置如下圖 象棋的"馬"步 日字型走法 示意圖
題目會給我們一個陣列nums,要求我們以每個陣列元素分別當作軸心點,計算差值的絕對值總和,最後以陣列的形式,返回答案。 測試範例 Example 1: Input: nums = [2,3,5] Output: [4,3,5]
題目敘述 題目會給我們一個不規則排列的二維陣列,要求我們列出從起點出發,走次對角線,由左下到右上逐層拜訪的路徑。
題目敘述 題目會給我們一個陣列,要求我們返回 兩數之和=target所在的陣列索引值。 題目還額外保證,一定剛好有一組解。 測試範例 Example 1: Input: nums = [2,7,11,15], target = 9 Output: [0,1]
這題的題目在這裡:Find Pivot Index 題目敘述 題目會給我們一個整數陣列nums,要求我們計算平衡軸心點在哪? 平衡軸心的意思就是軸心點索引左側的元素總合 = 軸心點索引右側的元素總合
題目會給我們一個方陣,要求我們計算兩條對角線的元素總和。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
給定一個長度為 n,而且索引從 0 開始的整數陣列 chalk 和參數 k 。一開始粉筆盒裡總共有 k 支粉筆。 當編號為 i 的學生回答問題時,會消耗 chalk[i] 支粉筆。 如果剩餘粉筆數量小於 chalk[i] ,那麼學生 i 需要 補充 粉筆。 請找出需要補充粉筆的學生的學生編號。
Thumbnail
給定一個陣列,分別代表每位顧客的抵達時間和廚師準備時間。請問平均的等待時間是多少? 等待時間定義為客人開始真正用餐的時間 - 客人抵達的時間。演算法為計算廚師的出餐時間。
Thumbnail
本文提供了一個關於模擬法演算法的問題,介紹了操作指令的格式及其解析。透過程式碼模擬每條指令,找出回到根目錄所需的操作次數。本文詳細說明瞭模擬法的複雜度分析,能夠幫助讀者更好地理解這個問題。
Thumbnail
題目敘述 題目會給定一個指定高度和寬的方格版,還有一顆小球的起始位置,和最大移動步數。 小球每一步可以選擇向上、下、左、右移動一格,請問小球能走到方格版界外的路徑方法數總共有幾種? 方法數可能很大,題目要求,最後回傳答案時,先對10^9+7做除法取餘數再回傳。 題目的原文敘述 約束條件
Thumbnail
題目敘述 題目會給我們一個corridor陣列,裡面代表盆栽和座位的分布,P代表Plant盆栽,S代表Seat座位。要求我們依照佈置規則放置隔板,計算總共有幾個合法的隔板分割方法數? 規則: 每兩個座位視為一組,每兩組之間的盆栽所產生的空位,皆可放置一片隔板。 每一組分割內必須恰好包含兩個座位
Thumbnail
閒聊 相較於前面2篇,鴻海&日月光,是在除權息後,出現大幅度回檔,進行抄底反彈。 20230705操作隨筆-與鴻海的恩怨情仇|方格子 vocus 20230705操作隨筆-與鴻海的恩怨情仇|方格子 vocus 這次是在車上,搭著除權息行情,進行一波操作,2波價差都有吃到,一起存股鞋子的網友,
Thumbnail
AI室內設計工具,大致上可以提供四大產業面向的功能:1.對零售實體店家而言,可以展現店家形象;2.電子商務方面給予模擬產品於各種空間內展示的功能,省去實品於攝影棚拍攝的步驟及成本;3.對於房產或房東來說,更便於優化房屋或建築物等內飾及外觀的塑造;4.室內設計師、建築師、景觀師、佈置師等專家⋯⋯
對自閉症者而言,根本無法連串「上課要坐好=我要坐好」的相關性。 這情況,該怎麼辦? 安坐訓練務必進行 這在入幼稚園前,就要進行了。 剛開始,就要以角落為主,讓自閉症者使初步認知。 在自閉症者經由小活動的進行,感到好玩而有動機,就開始走出小世界。 在進行撤掉桌椅時,以漸進式為主 基本上,
Thumbnail
Web 3- 所有權 ( Ownership)就是社群。每個 TA 都是實實在在參與社群的建構、打造社群共識的人。在 Web 3 世界裡的一個鏈上,可以是由多個不同 interest niche 社群所組成的,甚至每個社群之間有像小丑魚和海葵一樣不可分割、必須互利共生的關係存在。這一點是和 Web
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
給定一個長度為 n,而且索引從 0 開始的整數陣列 chalk 和參數 k 。一開始粉筆盒裡總共有 k 支粉筆。 當編號為 i 的學生回答問題時,會消耗 chalk[i] 支粉筆。 如果剩餘粉筆數量小於 chalk[i] ,那麼學生 i 需要 補充 粉筆。 請找出需要補充粉筆的學生的學生編號。
Thumbnail
給定一個陣列,分別代表每位顧客的抵達時間和廚師準備時間。請問平均的等待時間是多少? 等待時間定義為客人開始真正用餐的時間 - 客人抵達的時間。演算法為計算廚師的出餐時間。
Thumbnail
本文提供了一個關於模擬法演算法的問題,介紹了操作指令的格式及其解析。透過程式碼模擬每條指令,找出回到根目錄所需的操作次數。本文詳細說明瞭模擬法的複雜度分析,能夠幫助讀者更好地理解這個問題。
Thumbnail
題目敘述 題目會給定一個指定高度和寬的方格版,還有一顆小球的起始位置,和最大移動步數。 小球每一步可以選擇向上、下、左、右移動一格,請問小球能走到方格版界外的路徑方法數總共有幾種? 方法數可能很大,題目要求,最後回傳答案時,先對10^9+7做除法取餘數再回傳。 題目的原文敘述 約束條件
Thumbnail
題目敘述 題目會給我們一個corridor陣列,裡面代表盆栽和座位的分布,P代表Plant盆栽,S代表Seat座位。要求我們依照佈置規則放置隔板,計算總共有幾個合法的隔板分割方法數? 規則: 每兩個座位視為一組,每兩組之間的盆栽所產生的空位,皆可放置一片隔板。 每一組分割內必須恰好包含兩個座位
Thumbnail
閒聊 相較於前面2篇,鴻海&日月光,是在除權息後,出現大幅度回檔,進行抄底反彈。 20230705操作隨筆-與鴻海的恩怨情仇|方格子 vocus 20230705操作隨筆-與鴻海的恩怨情仇|方格子 vocus 這次是在車上,搭著除權息行情,進行一波操作,2波價差都有吃到,一起存股鞋子的網友,
Thumbnail
AI室內設計工具,大致上可以提供四大產業面向的功能:1.對零售實體店家而言,可以展現店家形象;2.電子商務方面給予模擬產品於各種空間內展示的功能,省去實品於攝影棚拍攝的步驟及成本;3.對於房產或房東來說,更便於優化房屋或建築物等內飾及外觀的塑造;4.室內設計師、建築師、景觀師、佈置師等專家⋯⋯
對自閉症者而言,根本無法連串「上課要坐好=我要坐好」的相關性。 這情況,該怎麼辦? 安坐訓練務必進行 這在入幼稚園前,就要進行了。 剛開始,就要以角落為主,讓自閉症者使初步認知。 在自閉症者經由小活動的進行,感到好玩而有動機,就開始走出小世界。 在進行撤掉桌椅時,以漸進式為主 基本上,
Thumbnail
Web 3- 所有權 ( Ownership)就是社群。每個 TA 都是實實在在參與社群的建構、打造社群共識的人。在 Web 3 世界裡的一個鏈上,可以是由多個不同 interest niche 社群所組成的,甚至每個社群之間有像小丑魚和海葵一樣不可分割、必須互利共生的關係存在。這一點是和 Web