面試題 03 05 棧排序

2021-10-09 16:50:30 字數 1439 閱讀 1919

面試題 03.05. 棧排序

棧排序。 編寫程式,對棧進行排序使最小元素位於棧頂。最多只能使用乙個其他的臨時棧存放資料,但不得將元素複製到別的資料結構(如陣列)中。該棧支援如下操作:push、pop、peek 和 isempty。當棧為空時,peek 返回 -1。

示例1:

輸入:

[「sortedstack」, 「push」, 「push」, 「peek」, 「pop」, 「peek」]

[, [1], [2], , , ]

輸出:[null,null,null,1,null,2]

示例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...