前端基礎演算法題解法

2021-10-09 23:18:18 字數 3373 閱讀 6220

**均為自己手寫,如有錯誤或更優解法,勞煩小夥伴們指教哈~

// 解法一

function a (n, a1 = 1, a2 = 1)

let res = a(5)

console.log(res)

// 解法二

let a1 = 1, a2 = 1

function b (n)

return a2

}let res = b(5)

console.log(res)

let arr = [2, 53, 32, 21, 432, 54, 76, 45, 654]

let l = arr.length

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

}}console.log(arr)

let arr = [2, 53, 32, 21, 432, 54, 76, 45, 654]

let l = arr.length

for (let i = 0; i < l; i++)

}if (index !== i)

}console.log(arr)

let arr = [2, 53, 32, 21, 432, 54, 76, 45, 654]

let l = arr.length

for (let i = 0; i < l; i++)

}console.log(arr)

let arr = [2, 53, 32, 21, 432, 54, 76, 45, 654]

let l = arr.length

let gap = math.floor(l / 2)

for (gap; gap > 0; gap = math.floor(gap / 2))

if (index !== -1)

}}console.log(arr)

let arr = [89, 53, 32, 21, 432, 54, 76, 45, 654]

function mergesort (arr)

let left = , right =

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

right = arr

return merge(mergesort(left), mergesort(right))

}function merge (left, right) else

} while (left.length > 0)

while (right.length > 0)

return list

}let res = mergesort(arr)

console.log(res)

let arr = [89, 53, 32, 21, 432, 54, 76, 45, 654]

function quicksort (arr, left, right)

let i = left, j = right

// 記錄當前基準值在左邊還是右邊

let flag = 'left'

while (i < j)

if (i < j)

} else if (flag === 'right')

if (i < j) }}

quicksort(arr, left, i - 1)

quicksort(arr, i + 1, right)

}quicksort(arr, 0, arr.length - 1)

console.log(arr)

這個演算法沒想出來,搬運一下大神的**

var len;   // 因為宣告的多個函式都需要資料長度,所以把len設定成為全域性變數

function buildmaxheap(arr) }

function heapify(arr, i)

if (right < len && arr[right] > arr[largest])

if (largest != i) }

function swap(arr, i, j)

function heapsort(arr)

return arr;

}

/* 二叉樹 demo

* 0

* 1 2

* 3 4 5 6

* 7 8 9 10

*/// 前序遍歷陣列 根 左 右

let pre = [0, 1, 3, 7, 8, 4, 9, 2, 5, 6, 10]

// 中序遍歷陣列 左 根 右

let mid = [7, 3, 8, 1, 4, 9, 0, 5, 2, 6, 10]

// 後序遍歷陣列 [7, 8, 3, 9, 4, 1, 5, 10, 6, 2, 0]

let back =

// 二叉樹資料結構

let tree = ,

right: {}

}// 構造二叉樹

function buildtree (pre, mid)

let root = pre[0]

let mid_left = mid.slice(0, mid.indexof(root))

let mid_right = mid.slice(mid.indexof(root) + 1, mid.length)

let pre_left = pre.slice(1, mid_left.length + 1)

let pre_right = pre.slice(mid_left.length + 1, pre.length)

return

}// 生成後序遍歷

function renderback (tree)

if (tree.right !== null)

if (tree.left === null && tree.right === null)

back.push(tree.val)

}// 執行函式

tree = buildtree(pre, mid)

renderback(tree)

// 輸出結果

console.log(tree, back)

持續更新中…

前端演算法題解析 《三》

給定字串j 代表石頭中寶石的型別,和字串 s代表你擁有的石頭。s 中每個字元代表了一種你擁有的石頭的型別,你想知道你擁有的石頭中有多少是寶石。j 中的字母不重複,j 和 s中的所有字元都是字母。字母區分大小寫,因此 a 和 a 是不同型別的石頭。示例 1 輸入 j aa s aaabbbb 輸出 3...

一道演算法題解法,笑出聲

今天在牛客上刷了一道題,題目是這樣的 求出1 13的整數中1出現的次數,並算出100 1300的整數中1出現的次數?為此他特別數了一下1 13中包含1的數字有1 10 11 12 13因此共出現6次,但是對於後面問題他就沒轍了。acmer希望你們幫幫他,並把問題更加普遍化,可以很快的求出任意非負整數...

top K 問題解法

問題描述 從arr 1,n 這n個數中,找出最大的k個數,這就是經典的topk問題。栗子 從arr 1,12 這n 12個數中,找出最大的k 5個。一 排序 排序是最容易想到的方法,將n個數排序之後,取出最大的k個,即為所得。偽 sort arr,1,n return arr 1,k 時間複雜度 o...