Good, better, best. Never let it rest.

1
2
3
4
5
6
7
8
9
/**
* 普利姆算法
* 思路:尽可能选择少的路线,并且每条路线最小,保证总里程数最少
* 最小生成树:
* 修路的问题本质是最小生成树的问题,N个顶点,N-1条边,包含全部顶点
* 步骤:
* 1.循环访问过的节点,和没访问过的节点,找到一条最小权重的边
* 2.循环N-1次,找到N-1条边
*/
阅读全文 »

1
2
3
4
5
6
7
8
9
10
11
12
13
 思路:
1)选择排序有数组大小-1轮排序
2)每一轮排序,又是一个循环,循环的规则:
2.1)先假定当前数是最小数
2.2)然后和后面的每个数进行比较,如果有更小的数,则重新确定最小数,并得到下标
2.3)当遍历到数组的最后,就得到本轮最小数和下标
2.4)交换

代码:
先写出最简单的第一次循环结果
然后第二次、第三次,寻找规律

粘贴代码如下:
阅读全文 »

1
2
3
4
5
6
7
8
9
/**
* 桶排序思路:
*
* 1.找出待排序数组中的最大值max、最小值min
* 2.我们使用 动态数组ArrayList 作为桶,桶里放的元素也用 ArrayList 存储。桶的数量为(max-min)/arr.length + 1
* 3.遍历数组 arr,计算每个元素 arr[i] 放的桶(根据商相等取得相近元素放入一个桶中)
* 4.每个桶各自排序
* 5.遍历桶数组,把排序好的元素放进输出数组
*/
阅读全文 »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* 环形链表解决约瑟夫问题
* 问题:
* 小孩围成一圈
* n=5 有5个人
* k=1 从第1个人开始数数
* m=2 数2下
* 数到的小孩出圈
* 解决:
* a)创建一个辅助指针变量,指向环形链表最后一个节点
* b)小孩报数前,先让first和help移动k-1次
* c)小孩报数时,first和help同时移动m-1次
* d)这时将first指向的小孩节点出圈 first = first.next helper.next = first
*/

粘贴代码如下:
阅读全文 »