演算法類面試題

2022-07-29 00:57:11 字數 1294 閱讀 5270

判斷括號成對出現

sdfj(nrg(lj()k)nk)sldjwef          合法

q(wdwf()hknkql(whdq)w)       合法

hk)nqeif)liq(h(flq)wj(              不合法

思路:括號存在巢狀關係,也存在並列關係

可以遍歷字串的每乙個字元,使用棧來處理:

(1)遇到左括號,把左括號壓入棧中

(2)遇到右括號,判斷棧是否為空,為空說明沒有左括號與之對應,則不合法。如果棧不為空,則移除棧頂的左括號---這對括號抵消了

當遍歷結束後,如果棧是空的則合法,否則不合法

解析:(1)比較相鄰的兩個元素,如果前乙個比後乙個大,則交換位置

(2)第一輪的時候,最後乙個元素應該是最大的乙個

(3)按照步驟(1)的方法進行相鄰兩個元素比較,由於最後乙個元素已經是最大的了,所以最後乙個元素不用比較

//

氣泡排序

let arr = [1, 6, 3, 7, 5, 9, 2, 8];

function

sort(arr)

}} console.log(arr)

console.timeend(

"氣泡排序耗時")}

sort(arr)

解析:快速排序是對氣泡排序的一種改進,第一趟排序時將資料分成兩個部分,一部分比另一部分的所有資料都要小。然後遞迴呼叫,在兩邊都實現快速排序。

//

快速排序

//快速排序就是從中間取乙個數,然後宣告兩個空陣列

//小於這個數的放在左邊,大於這個數的放在右邊

//最後通過遞迴呼叫實現的一種排序方法

//比氣泡排序用的更多

let arr = [1, 6, 3, 7, 2, 2, 2, 5, 9, 2, 8];

function

sort(arr)

let middleindex = math.floor(arr.length / 2) //

中間數的下標,分奇偶

let middle = arr.splice(middleindex, 1)[0]

let left =

let right =

for (let i = 0; i < arr.length; i++)

else

} return

sort(left).concat([middle], sort(right))

}console.log(sort(arr))

js十大排序演算法:

演算法面試題

1 兩個有序的陣列求中位數 時間複雜度o log n m 這個演算法有一定的缺陷,僅做參考 2 如何解決hash衝突 3 調整陣列順序使奇數字於偶數前面 void reorderoddeven int pdata,unsigned int length 4 鍊錶中倒數第k個節點 listnode f...

演算法面試題

戰爭遊戲的至關重要環節就要到來了,這次的結果將決定王國的生死存亡,小b負責首都的防衛工作。首都位於乙個四面環山的盆地中,周圍的n個小山構成乙個環,作為預警措施,小b計畫在每個小山上設定乙個觀察哨,日夜不停的瞭望周圍發生的情況。一旦發生外地入侵事件,山頂上的崗哨將點燃烽煙,若兩個崗哨所在的山峰之間沒有...

演算法面試題

假設有n個人,1 n,從第乙個開始計數,到第k個人則出列,隨後從第k 1個人重新計數,再到k出列,直到剩下最後乙個,求最後乙個人的編號。字串排序,先把comparefunction寫出來,然後呼叫arr.sort comparefunction comparefunction function co...