- 博客(27)
- 收藏
- 关注
原创 二分查找问题总结
我们三种场景都使用[left, right]全封闭区间来进行求解一.普通二分查找int binarySearch(vector<int> nums, int target){ // 初始化左右边界的初始值 // 我们使用全封闭区间,所以所有的区间都是合法的,right初始值不能直接是nums.size() int left = 0; int right = nums.size() - 1; // 二分查找一定是有序的,我们先进行排序 // 当然,一般题目都是有序的队列,毕
2021-04-30 14:01:25 98
原创 双向BFS总结
双向BFS一.使用条件双向BFS的使用场景必须是知道起始点和终止点,即要遍历的起点,和要找的点我们都知道。虽然我们并不能用双向BFS来减少时间复杂度O(N),但是我们可以减少遍历节点的数目,理论上是可以减少一半需要遍历的节点数目,如下图二.算法流程框架说明:A.我们不再使用队列来作为遍历的容器,我们用hash容器,因为我们可以利用hash查找的特点,来帮助我们快速求解;B.我们可以采用交换的策略,来简化代码流程C.我们可以每次都遍历节点数目少的队列,这样,我们就可以遍历更少的点的,这是一个优
2021-04-30 10:42:56 326
原创 背包问题小结
0-1背包问题描述:有物品对应的重量列表weight[i]对应的价值为value[i],以及背包总量amount,求最少(最大也是一样)用多少物品装进背包(或者装满),是的背包的里面的价值最大状态:dp[i][j]表示第i个物品的时候,装进背包容量j最大的价值;初始状态:dp[][] = 0(如果是装满dp[*][0] = 0, 其他的都初始化为最小的负值)动态方程:dp[i][j] = max{dp[i-1][j], value[i]+dp[i-1][j - weight[i]]}for 物
2021-04-24 23:05:11 86
原创 leetcode-分割等和子集求解方法
1. 递归-记忆求解前言很重要,关于P、NP、NPC,谷歌百度多看几遍,常看常新。贡献一个dfs记忆化搜索的版本。首先,利用数组有序进行剪枝;其次,return语句中两个dfs也可以思考一下能否利用“或操作“的短路特性进一步增加提前返回的可能性(某种意义上也是剪枝)。class Solution { public boolean canPartition(int[] nums) { int sum = Arrays.stream(nums).sum(); if
2020-12-23 22:02:37 126
原创 动态规划之树形结构的状态转移方程
方法一:动态规划思路与算法简化一下这个问题:一棵二叉树,树上的每个点都有对应的权值,每个点有两种状态(选中和不选中),问在不能同时选中有父子关系的点的情况下,能选中的点的最大权值和是多少。我们可以用 f(o)f(o) 表示选择 o 节点的情况下,o 节点的子树上被选择的节点的最大权值和;g(o)g(o) 表示不选择 o 节点的情况下,o 节点的子树上被选择的节点的最大权值和;l 和 r 代表 o 的左右孩子。当 o 被选中时,o 的左右孩子都不能被选中,故 o 被选中情况下子树上被选中点的最大权值.
2020-12-17 23:33:49 437
转载 单词接龙---快速建图----双向BFS(广度优先遍历)
转载(https://leetcode-cn.com/problems/word-ladder/solution/dan-ci-jie-long-by-leetcode-solution/)方法一:广度优先搜索 + 优化建图思路本题要求的是最短转换序列的长度,看到最短首先想到的就是广度优先搜索。想到广度优先搜索自然而然的就能想到图,但是本题并没有直截了当的给出图的模型,因此我们需要把它抽象成图的模型。我们可以把每个单词都抽象为一个点,如果两个单词可以只改变一个字母进行转换,那么说明他们之间有一条双向
2020-12-09 22:39:12 221
原创 shell 脚本符号区分
bash shell 中如何区别 ()和()和()和{}和$(())和(())shell中 $( ) ${ } $(( )) [ ]的区别
2020-11-10 10:01:42 58
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人