面試題 03.05. 棧排序
棧排序。 編寫程式,對棧進行排序使最小元素位於棧頂。最多只能使用乙個其他的臨時棧存放資料,但不得將元素複製到別的資料結構(如陣列)中。該棧支援如下操作:push、pop、peek 和 isempty。當棧為空時,peek 返回 -1。示例1:
輸入:示例2:[「sortedstack」, 「push」, 「push」, 「peek」, 「pop」, 「peek」]
[, [1], [2], , , ]
輸出:[null,null,null,1,null,2]
輸入:** 解題思路**[「sortedstack」, 「pop」, 「pop」, 「push」, 「pop」, 「isempty」]
[, , , [1], , ]
輸出:[null,null,null,null,null,true]
暴力解法
題目要求要維護乙個排好序的棧,則意味這在每次棧中元素數目變化後,即pop或push後,棧仍然是乙個排序棧,pop不影響,push需要考慮,最簡單的方法就是插入,即將要push的值插入到棧中對應位置,維護排序棧。將小於val的值放入輔助棧,push(val),然後再從輔助棧中將其他元素挪回。
class
sortedstack
public
void
push
(int val)
}public
void
pop(
)public
intpeek()
public
boolean
isempty()
}
優化演算法
通過檢視提示我們得知有可以優化的演算法,具體思考,我們再push乙個值需要將前面的元素移到輔助棧再移回來,我們可以同時維護輔助棧和資料棧來減少重複移動。假設要push的元素為x:
class
sortedstack
public
void
push
(int val)
}else}}
public
void
pop(
) stack.
pop();
}public
intpeek()
int res = stack.
peek()
;return res;
}public
boolean
isempty()
}
面試題 03 05 棧排序
棧排序。編寫程式,對棧進行排序使最小元素位於棧頂。最多只能使用乙個其他的臨時棧存放資料,但不得將元素複製到別的資料結構 如陣列 中。該棧支援如下操作 push pop peek 和 isempty。當棧為空時,peek 返回 1。示例1 輸入 sortedstack push push peek p...
LeetCode面試題 03 05 棧排序
棧排序。編寫程式,對棧進行排序使最小元素位於棧頂。最多只能使用乙個其他的臨時棧存放資料,但不得將元素複製到別的資料結構 如陣列 中。該棧支援如下操作 push pop peek 和 isempty。當棧為空時,peek 返回 1。class sortedstack public void push ...
面試題 棧排序
棧排序。編寫程式,對棧進行排序使最小元素位於棧頂。最多只能使用乙個其他的臨時棧存放資料,但不得將元素複製到別的資料結構 如陣列 中。該棧支援如下操作 push pop peek 和 isempty。當棧為空時,peek 返回 1。輸入 sortedstack push push peek pop p...