Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 5d0d80a

Browse files
算法模板 添加 JavaScript 版本代码
1 parent f88678d commit 5d0d80a

File tree

1 file changed

+258
-1
lines changed

1 file changed

+258
-1
lines changed

‎problems/算法模板.md

Lines changed: 258 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ void backtracking(参数) {
248248
## 并查集
249249
250250
```CPP
251-
int n = 1005; // 更具题意而定
251+
int n = 1005; // 根据题意而定
252252
int father[1005];
253253
254254
// 并查集初始化
@@ -280,6 +280,263 @@ void backtracking(参数) {
280280
(持续补充ing)
281281
## 其他语言版本
282282

283+
JavaScript:
284+
285+
## 二分查找法
286+
287+
使用左闭右闭区间
288+
289+
```javascript
290+
var search = function (nums, target) {
291+
let left = 0, right = nums.length - 1;
292+
// 使用左闭右闭区间
293+
while (left <= right) {
294+
let mid = left + Math.floor((right - left)/2);
295+
if (nums[mid] > target) {
296+
right = mid - 1; // 去左面闭区间寻找
297+
} else if (nums[mid] < target) {
298+
left = mid + 1; // 去右面闭区间寻找
299+
} else {
300+
return mid;
301+
}
302+
}
303+
return -1;
304+
};
305+
```
306+
307+
使用左闭右开区间
308+
309+
```javascript
310+
var search = function (nums, target) {
311+
let left = 0, right = nums.length;
312+
// 使用左闭右开区间 [left, right)
313+
while (left < right) {
314+
let mid = left + Math.floor((right - left)/2);
315+
if (nums[mid] > target) {
316+
right = mid; // 去左面闭区间寻找
317+
} else if (nums[mid] < target) {
318+
left = mid + 1; // 去右面闭区间寻找
319+
} else {
320+
return mid;
321+
}
322+
}
323+
return -1;
324+
};
325+
```
326+
327+
## KMP
328+
329+
```javascript
330+
var kmp = function (next, s) {
331+
next[0] = -1;
332+
let j = -1;
333+
for(let i = 1; i < s.length; i++){
334+
while (j >= 0 && s[i] !== s[j + 1]) {
335+
j = next[j];
336+
}
337+
if (s[i] === s[j + 1]) {
338+
j++;
339+
}
340+
next[i] = j;
341+
}
342+
}
343+
```
344+
345+
## 二叉树
346+
347+
### 深度优先遍历(递归)
348+
349+
二叉树节点定义:
350+
351+
```javascript
352+
function TreeNode (val, left, right) {
353+
this.val = (val === undefined ? 0 : val);
354+
this.left = (left === undefined ? null : left);
355+
this.right = (right === undefined ? null : right);
356+
}
357+
```
358+
359+
前序遍历(中左右):
360+
361+
```javascript
362+
var preorder = function (root, list) {
363+
if (root === null) return;
364+
list.push(root.val); //
365+
preorder(root.left, list); //
366+
preorder(root.right, list); //
367+
}
368+
```
369+
370+
中序遍历(左中右):
371+
372+
```javascript
373+
var inorder = function (root, list) {
374+
if (root === null) return;
375+
inorder(root.left, list); //
376+
list.push(root.val); //
377+
inorder(root.right, list); //
378+
}
379+
```
380+
381+
后序遍历(左右中):
382+
383+
```javascript
384+
var postorder = function (root, list) {
385+
if (root === null) return;
386+
postorder(root.left, list); //
387+
postorder(root.right, list); //
388+
list.push(root.val); //
389+
}
390+
```
391+
392+
### 深度优先遍历(迭代)
393+
394+
前序遍历(中左右):
395+
396+
```javascript
397+
var preorderTraversal = function (root) {
398+
let res = [];
399+
if (root === null) return rs;
400+
let stack = [root],
401+
cur = null;
402+
while (stack.length) {
403+
cur = stack.pop();
404+
res.push(cur.val);
405+
cur.right && stack.push(cur.right);
406+
cur.left && stack.push(cur.left);
407+
}
408+
return res;
409+
};
410+
```
411+
412+
中序遍历(左中右):
413+
414+
```javascript
415+
var inorderTraversal = function (root) {
416+
let res = [];
417+
if (root === null) return res;
418+
let stack = [];
419+
let cur = root;
420+
while (stack.length !== 0 || cur !== null) {
421+
if (cur !== null) {
422+
stack.push(cur);
423+
cur = cur.left;
424+
} else {
425+
cur = stack.pop();
426+
res.push(cur.val);
427+
cur = cur.right;
428+
}
429+
}
430+
return res;
431+
};
432+
```
433+
434+
后序遍历(左右中):
435+
436+
```javascript
437+
var postorderTraversal = function (root) {
438+
let res = [];
439+
if (root === null) return res;
440+
let stack = [root];
441+
let cur = null;
442+
while (stack.length) {
443+
cur = stack.pop();
444+
res.push(cur.val);
445+
cur.left && stack.push(cur.left);
446+
cur.right && stack.push(cur.right);
447+
}
448+
return res.reverse()
449+
};
450+
```
451+
452+
### 广度优先遍历(队列)
453+
454+
```javascript
455+
var levelOrder = function (root) {
456+
let res = [];
457+
if (root === null) return res;
458+
let queue = [root];
459+
while (queue.length) {
460+
let n = queue.length;
461+
let temp = [];
462+
for (let i = 0; i < n; i++) {
463+
let node = queue.shift();
464+
temp.push(node.val);
465+
node.left &&queue.push(node.left);
466+
node.right && queue.push(node.right);
467+
}
468+
res.push(temp);
469+
}
470+
return res;
471+
};
472+
```
473+
474+
### 二叉树深度
475+
476+
```javascript
477+
var getDepth = function (node) {
478+
if (node === null) return 0;
479+
return 1 + Math.max(getDepth(node.left), getDepth(node.right));
480+
}
481+
```
482+
483+
### 二叉树节点数量
484+
485+
```javascript
486+
var countNodes = function (root) {
487+
if (root === null) return 0;
488+
return 1 + countNodes(root.left) + countNodes(root.right);
489+
}
490+
```
491+
492+
## 回溯算法
493+
494+
```javascript
495+
function backtracking(参数) {
496+
if (终止条件) {
497+
存放结果;
498+
return;
499+
}
500+
501+
for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
502+
处理节点;
503+
backtracking(路径,选择列表); // 递归
504+
回溯,撤销处理结果
505+
}
506+
}
507+
508+
```
509+
510+
## 并查集
511+
512+
```javascript
513+
let n = 1005; // 根据题意而定
514+
let father = new Array(n).fill(0);
515+
516+
// 并查集初始化
517+
function init () {
518+
for (int i = 0; i < n; ++i) {
519+
father[i] = i;
520+
}
521+
}
522+
// 并查集里寻根的过程
523+
function find (u) {
524+
return u === father[u] ? u : father[u] = find(father[u]);
525+
}
526+
// 将v->u 这条边加入并查集
527+
function join(u, v) {
528+
u = find(u);
529+
v = find(v);
530+
if (u === v) return ;
531+
father[v] = u;
532+
}
533+
// 判断 u 和 v是否找到同一个根
534+
function same(u, v) {
535+
u = find(u);
536+
v = find(v);
537+
return u === v;
538+
}
539+
```
283540

284541
Java:
285542

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /