Good, better, best. Never let it rest.

1
2
3
4
5
6
7
对一个整数数组,求不相邻的数相加的最大值
分别用递归和动态规划求解:
递归的代码更简洁,但是时间复杂度为O(n2),
动态规划是把前面计算的结果存储在内存中(数组),避免了重复计算,
时间复杂度是O(n),执行效率大大提高。

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

1
2
3
4
5
6
7
8
9
10
11
12
 0-1背包问题算法的主要思想:
利用动态规划来解决,每次遍历到的第i个物品,利用w[i]和val[i]来确定是否需要将该物品放入背包中。
即对于给定的n个物品,设val[i]、w[i]分别为第i个物品的价值和重量,C为背包的容量,再令v[i][j]
表示在前i个物品中能够装入容量为j的背包中的最大价值。
计算公式:
1)v[i][0]=v[0][i]=0; // 表示表格的第一行和第一列都是0
2)当w[i]>j时,v[i][j]=v[i-1][j] // 当准备加入新增的商品的容量大于当前背包的容量时,就直接使用上一个单元格的装入策略
3)当j>=w[i]时,v[i][j]=max{v[i-1][j], val[i]+v[i-1][j-w[i]]} // 当准备加入的新增商品容量小于等于当前背包剩余容量时
在两者之间取最大值。v[i-1][j-w[i]] 装入i-1个商品时背包剩余容量的最大值。


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

这里的重点是理解指针

1
2
3
4
1.中序遍历把二叉树转为一个递增数组
2.声明一个变量ans,指向0节点。变量cur也指向0节点
3.指针变量cur的右节点指向1节点,然后当前指针cur右移一位
4.循环下来,变量ans位置没变,他的右节点就是目标右子节点树状结构
阅读全文 »

1
2
3
4
5
6
插入排序思路:
1)把n个待排序的元素看成一个有序列表和一个无序列表
2)开始时有序列表只有1个元素,无序列表有n-1个元素
3)排序时每次从无序表中取出第一个元素,依次与有序表中的元素进行比较,并插入到适当的位置

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