Re: [閒聊] leetcode 大師請進已回收
※ 引述《ZooseWu (動物園 公告)》之銘言:
: 幫我解題
: 我有一組不重複的正整數一維陣列
: 每次行動可以將某個數字插入另一個數字的後面
: 行動以一個長度為二的陣列[a, b]表示 a 插入 b 後面
: 如果元素要放到開頭就以插入 0 表示
: 求最小行動數的二維陣列
: ex:
: 題目: [1, 3, 7, 9, 5, 2]
: 答: [[2, 1], [5, 3]]
: 題目: [9, 7, 5, 3, 1]
: 答: [[1, 0], [3, 1], [5, 3], [7, 5]]
: 或是 [[7, 0], [5, 0], [3, 0], [1, 0]]
: 題目的陣列長度是三位數
: 元素都是正整數(其實沒差,不過限定正整數比較好設定排頭)
1.先把陣列分成兩堆,遞增的記住他們的索引變一個單調堆疊,非遞增的記住他們的值。
2.把非遞增的值排序。
3.從最大數字x開始處理非遞增的值,如果stack頂端大於x就把頂端元素pop,如果比較小
就表示要插到頂端的右邊,如果單調堆疊已經空就插到0,因為是從大的元素開始插入
所以右邊的索引變怎樣就不用管了。
py code
-------------------------------------------
def min_actions(arr):
res = []
s = []
ls = []
for i in range(len(arr)):
if not s or arr[s[-1]] < arr[i]:
s.append(i)
else:
ls.append(arr[i])
ls.sort()
while ls:
while s and arr[s[-1]] > ls[-1]:
s.pop()
x = ls.pop()
if not s:
res.append((0, x))
else:
res.append((s[-1] + 1, x))
return res
-------------------------------------------
我亂寫的 那兩個測資有過 複雜度是O(nlogn) 可能有bug 對不起
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.100.73.13 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1715004991.A.6C8.html
※ 編輯: Rushia (122.100.73.13 臺灣), 05/06/2024 22:17:19
推
05/06 22:17,
1年前
, 1F
05/06 22:17, 1F
推
05/06 22:18,
1年前
, 2F
05/06 22:18, 2F
推
05/06 22:18,
1年前
, 3F
05/06 22:18, 3F
推
05/06 22:19,
1年前
, 4F
05/06 22:19, 4F
推
05/06 22:20,
1年前
, 5F
05/06 22:20, 5F
推
05/06 22:22,
1年前
, 6F
05/06 22:22, 6F
推
05/06 22:26,
1年前
, 7F
05/06 22:26, 7F
→
05/06 22:30,
1年前
, 8F
05/06 22:30, 8F
推
05/06 22:33,
1年前
, 9F
05/06 22:33, 9F
→
05/06 22:46,
1年前
, 10F
05/06 22:46, 10F
→
05/06 22:46,
1年前
, 11F
05/06 22:46, 11F
推
05/06 22:53,
1年前
, 12F
05/06 22:53, 12F
※ 編輯: Rushia (122.100.73.13 臺灣), 05/06/2024 22:55:08
推
05/06 23:33,
1年前
, 13F
05/06 23:33, 13F
討論串 (同標題文章)