摘要: https://www.nowcoder.com/questionTerminal/4ce64fe976c548f5beacfe47faf666b0?orderByHotValue=1&page=1&onlyReference=false 现将上面一行相连的海洋设置为-1,再将第一列和最后一列相连海 阅读全文
posted @ 2018-08-23 16:43 何许 阅读(860) 评论(0) 推荐(0) 编辑
摘要: 待学习。。 看了上面代码,自己给思路改进了一下,代码如下: 类似于图的广度优先遍历,每一种情况都一个个入队列,然后判断是否和预期的状态相等,相等时候停止循环,输出并返回。 阅读全文
posted @ 2018-08-23 11:48 何许 阅读(358) 评论(0) 推荐(0) 编辑
摘要: 递归,一行一行放置,判断是否放置完成,完成则输出到result中。 阅读全文
posted @ 2018-08-07 20:14 何许 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 这个路径可能存在从子节点经过父节点,再到子节点的情况,所有从当前节点构成的路径需要考虑左右两条路径相加,用递归,求得左右的最长路径,相加,即为所求 阅读全文
posted @ 2018-08-07 09:09 何许 阅读(185) 评论(0) 推荐(0) 编辑
摘要: struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}}; //树相同bool isSameTree(TreeNode* p, T 阅读全文
posted @ 2018-08-06 15:47 何许 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 现有n件物品和一个容量为c的背包。第i件物品的重量是重量为w[i],价值是v[i]。已知对于一件物品必须选择取(用1表示)或者不取(用0表示),且每件物品只能被取一次(这就是“0-1”的含义)。求放置哪些物品进背包,可使这些物品的重量总和不超过背包容量,且价值总和最大。 01背包问题: c[i][j 阅读全文
posted @ 2018-08-03 11:32 何许 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 参考:http://blog.sina.com.cn/s/blog_61034ad90100encg.html f[i][j]表示i时刻移动j次的情况,f[i][j] = Max(f[i - 1][j], f[i - 1][j - 1]) + int(a[i] == (j + 1) % 2) 表示这 阅读全文
posted @ 2018-08-03 11:23 何许 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 参考https://www.cnblogs.com/grandyang/p/6103525.html 思路是遍历每一种可能性,得出必胜的走法。然而,用递归会存在很多的重复计算,所以可用动态规划存储下计算的状态,用map<int,bool>存储,其中int对应current,考虑,所以可以用int来存 阅读全文
posted @ 2018-08-03 11:16 何许 阅读(338) 评论(0) 推荐(0) 编辑
摘要: 动态规划问题,主要在于需要想清楚递推关系,num[i][j]表示能使用 i 种硬币时,得到 j 零钱的最优解。 想来就是首先假设只能使用第一种硬币 1 ,那么会得到num[ 1 : n] = {1,2,3,4.....n},然后在此基础上,我们引入第二种硬币 2 ,考虑num[i][j],此时存在两 阅读全文
posted @ 2018-08-01 23:45 何许 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 容易想到,直接遍历vector,i += 2 ;将偶数位置的数交换为当前i的情侣,遍历可得 这样效率不高: 尝试用hash优化搜索效率:(建立unordered_map<int,int> 能以常数时间找到value对应位置,然后进行交换) 效果如下: 阅读全文
posted @ 2018-07-25 21:57 何许 阅读(370) 评论(0) 推荐(0) 编辑