1. 問題描述:
給你乙個目標陣列 target 和乙個整數 n。每次迭代,需要從 list = 中依序讀取乙個數字。
請使用下述操作來構建目標陣列 target :
push:從 list 中讀取乙個新元素, 並將其推入陣列中。
pop:刪除陣列中的最後乙個元素。
如果目標陣列構建完成,就停止讀取更多元素。
題目資料保證目標陣列嚴格遞增,並且只包含 1 到 n 之間的數字。
請返回構建目標陣列所用的操作序列。
題目資料保證答案是唯一的。
示例 1:
輸入:target = [1,3], n = 3
輸出:["push","push","pop","push"]
解釋:
讀取 1 並自動推入陣列 -> [1]
讀取 2 並自動推入陣列,然後刪除它 -> [1]
讀取 3 並自動推入陣列 -> [1,3]
示例 2:
輸入:target = [1,2,3], n = 3
輸出:["push","push","push"]
示例 3:
輸入:target = [1,2], n = 4
輸出:["push","push"]
解釋:只需要讀取前 2 個數字就可以停止。
示例 4:
輸入:target = [2,3,4], n = 4
輸出:["push","pop","push","push","push"]
1 <= target.length <= 100
1 <= target[i] <= 100
1 <= n <= 100
target 是嚴格遞增的
2. 思路分析:
① 題目還是比較好理解的,從題目以及測試用例中可以看到當當前target陣列有當前1~n的數字的時候,說明這個數字是push的,並且是沒有彈出來的,當target沒有當前1~n的數字的時候,說明這樣元素是經過push之後馬上pop出來了,比如[2,3,4]中1這個數字沒有說明是先push1這個元素,再pop這個元素,2,3,4元素都是存在的說明只是push了元素,所以基於這個想法我們使用乙個for迴圈遍歷1~n,然後判斷當前對應的數字在target中是否存在,假如存在那麼往list中加入push字串即可,假如不存在那麼加入push,pop字串,這也就是對應的操作了
② 怎麼樣判斷在target中是否存在當前的元素呢,乙個比較容易想到的方法是使用map來進行對映,因為經過map對映之後可以快速找到值是否存在,我們在一開始的時候就將target中的所有元素加入到map中,然後遍歷1~n看當前的數字中map是否存在並且執行對應的操作(加入字串即可)
3. **如下:
class solution
listres = new arraylist<>();
int count = 0;
for (int i = 1; i <= n; ++i)else
if (count == target.length)return res;
}return res;
}}
1441 用棧操作構建陣列
給你乙個目標陣列target和乙個整數n。每次迭代,需要從list 中依序讀取乙個數字。請使用下述操作來構建目標陣列target 題目資料保證目標陣列嚴格遞增,並且只包含1到n之間的數字。請返回構建目標陣列所用的操作序列。題目資料保證答案是唯一的。示例 1 輸入 target 1,3 n 3輸出 p...
1441 用棧操作構建陣列
題目描述 給你乙個目標陣列 target 和乙個整數 n。每次迭代,需要從 list 中依序讀取乙個數字。請使用下述操作來構建目標陣列 target push 從 list 中讀取乙個新元素,並將其推入陣列中。pop 刪除陣列中的最後乙個元素。如果目標陣列構建完成,就停止讀取更多元素。題目資料保證目...
1441 用棧操作構建陣列
給你乙個目標陣列 target 和乙個整數 n。每次迭代,需要從 list 中依序讀取乙個數字。請使用下述操作來構建目標陣列 target push 從 list 中讀取乙個新元素,並將其推入陣列中。pop 刪除陣列中的最後乙個元素。如果目標陣列構建完成,就停止讀取更多元素。題目資料保證目標陣列嚴格...