2025年11月16日 星期日

Lua, 7 kyu, 排隊問題

 7 kyu, Lost Lineup

這題很簡單,我一開始實作的方法是:

local function find_lineup(distances)
  local a, d = {}, #distances
  for i = 1, d do
    a[i] = -1
  end
  for i = 1, d do
    local n = distances[i] + 1
    if -1 == a[n] then
      a[n] = i
    else
      return {}
    end
  end
  for i = 1, d do
    if -1 == a[i] then
      return {}
    end
  end
  return a
end

return find_lineup

後來看了別人的方法,

主要有兩點,會比我簡潔:

1. 利用a = {}時,空的table, 裡面的元素預設值是nil

例如 a[2] = nil

2. 利用排隊正常時,會排完,且每個人只佔住一個號碼,

因此排隊號碼,不可能大於總人數。

由以上兩點,我改寫如下:

local function find_lineup(distances)
  local a, d = {}, #distances
  for i = 1, d do
    local n = distances[i] + 1
    if nil == a[n] and n <= d then
      a[n] = i
    else
      return {}
    end
  end
  return a
end

return find_lineup


沒有留言:

張貼留言

Lean 4 極簡教學 (Using VS Code on macOS)

 1. Install Lean Environment: https://lean-lang.org/install/ 試著完Step one, two, three 2. 在VS code下,建一新的project: 取名Hello_World 3. 嘗試執行Main.lea...