algorithmbook icon indicating copy to clipboard operation
algorithmbook copied to clipboard

没有经过整理的知识才是徒然浪费时间,伤透脑筋!

Results 32 algorithmbook issues
Sort by recently updated
recently updated
newest added

### 链表排序 最后我们看一下链表排序。排序时,我们不能使用任何访问link[index]的排序算法,因此有如下排序方法入围。 #### 插入排序 将链表分明两部分,有序与未排序,每次从未排序区取得第一个,在有序区中找到适合位置进行插入 ```javascript function insertSort(list) { let head = list.head; //如果没有或只有一个节点,直接返回 if (!head || !head.next){ return; } let lastSorted = head;//排好序的最后一个 while (lastSorted.next) {//如果还有下一个 let firstUnsort...

## 表达式求值 表达式求值是程序设计语言中的一个最基本问题。它的实现是栈应用的又一个典型例子。这里介绍一种简单直观、广为使用的算法,通常称为“算符优先法”。 要把一个表达式翻译成正确求值的一个机器指令序列,或者直接对表达式求值,首先要能够正确解释表达式。例如要对下述表达式求值: >4+(6-10+2*2)*2 首先,要了解算术四则运算的规则。即: 1. 先乘除,后加减; 2. 从左算到右 3. 先括号内,后括号外 由此,这个算术表达式的计算顺序应为: >4+(6-10+2*2)*2 = 4+(-4+2*2)*2 = 4+(-4+4)*2 = 4+0*2 = 4+0 = 4 1 任何一个表达式都是由操作数(operand)、运算符(operator)和界限符(delimiter)组成。界限符也就是小括号,运算符包括加减乘除,以及更复杂的求余、三角函数等等。这里我们只讨论比较简单的算术表达式,只包括加减乘除四种运算符。 我们把运算符和界限符统称为算符,根据上述3条运算规则,在运算每一步中,任意两个相继出现的算符θ1和θ2之间的优先关系至多是下面三种关系之一: * θ1 <...

```javascript query(element) { var p = this.parents; while (element !== p[element]) {//如果一样就到顶,否则继续往上找 p[element] = p[p[element]]; element = p[element]; } return element; } ``` 这段完全是错的,路径压缩会把 element 的所有祖先的 parent 都设成根 我的 c++写法如下,你可以把他改成...

//构建一个满二叉树,并且保证最后一层的节点数必须多于n+2个 里面的满二叉树改成完美二叉树

写的太复杂了,只需要分三种情况 ```cpp void update(int l, int r, int ind, int val) { if(l > no[ind].r || r < no[ind].l)return; //不相交 if(l

`二叉搜索树` 改成 `二叉树`,线段树不是 BST

并集合 应为 并查集

堆是一种根点节总比它的孩子都大或都小的树 建议改成 堆是一种任意`节点`的`优先级`总比它的孩子的`优先级`大于`等于`或小于`等于`的树

1. 不用在公式里用`*`,可以用 `\cdot` 替代或不使用 2. log 的写法是 `\log`