动态规划实例 发表于 2020-04-09 更新于 2021-11-03 分类于 algorithm 1234567对一个整数数组,求不相邻的数相加的最大值分别用递归和动态规划求解:递归的代码更简洁,但是时间复杂度为O(n2),动态规划是把前面计算的结果存储在内存中(数组),避免了重复计算,时间复杂度是O(n),执行效率大大提高。粘贴代码如下: 阅读全文 »
动态规划解决 0-1背包问题 发表于 2020-04-08 更新于 2021-11-03 分类于 algorithm 123456789101112 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个商品时背包剩余容量的最大值。粘贴代码如下: 阅读全文 »
LeetCode 897.递增顺序查找树 发表于 2020-04-07 更新于 2021-11-03 分类于 algorithm 这里的重点是理解指针12341.中序遍历把二叉树转为一个递增数组2.声明一个变量ans,指向0节点。变量cur也指向0节点3.指针变量cur的右节点指向1节点,然后当前指针cur右移一位4.循环下来,变量ans位置没变,他的右节点就是目标右子节点树状结构 阅读全文 »
插入排序(易理解) 发表于 2020-04-05 更新于 2021-11-03 分类于 algorithm 123456插入排序思路:1)把n个待排序的元素看成一个有序列表和一个无序列表2)开始时有序列表只有1个元素,无序列表有n-1个元素3)排序时每次从无序表中取出第一个元素,依次与有序表中的元素进行比较,并插入到适当的位置粘贴代码如下: 阅读全文 »