**均為自己手寫,如有錯誤或更優解法,勞煩小夥伴們指教哈~
// 解法一
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...