05 2020 档案

摘要:在 NIO 中,我们读取 channel 中的数据,会通过 channel 的 read 尽最大努力将 Buffer 填满,填满后做一些其它处理。 对于 TCP 协议来说,这种做法无可厚非,因为 TCP 协议本身就不提供定界策略,只负责提供可靠的连接,也就是数据可靠的收发( 以 ack 应答机制为核 阅读全文
posted @ 2020-05-29 17:30 牛有肉 阅读(430) 评论(0) 推荐(0) 编辑
摘要:水平触发(level-triggered,也被称为条件触发)LT:只要满足条件,就触发一个事件。边缘触发(edge-triggered)ET:当状态变化时触发事件。JAVA 的 NIO 属于水平触发,而 epoll 既支持水平触发也支持边缘触发。epoll 性能高于 poll 很重要的一点便是 ep 阅读全文
posted @ 2020-05-27 22:22 牛有肉 阅读(4855) 评论(2) 推荐(1) 编辑
摘要:* @Description 问题为骑士跳 N 步有多少种跳法* 我们以步数 N 分割问题,此时发现,影响问题解的不只是步数,还在于骑士当前处在什么位置* 因为这决定了骑士下一步会不会越界* 所以我们以骑士所处的位置 x,y 以及剩余跳的步数 n 来定义问题* g(x,y,n) 表示处在 x,y 位 阅读全文
posted @ 2020-05-25 21:12 牛有肉 阅读(241) 评论(0) 推荐(0) 编辑
摘要:* @Description 从左上角开始移动,每次移动可以向右也可以向下* 问题本身自带状态转移关系,下一步状态基于上一步位置* 建立缓存时以位置为坐标,G(x,y) 表示从 x/y 坐标开始行动可以获取的最大价值* 因为有最大的含义, x/y 坐标可以唯一的确定 从本位置开始移动可获得的最大价值 阅读全文
posted @ 2020-05-17 00:09 牛有肉 阅读(236) 评论(0) 推荐(0) 编辑
摘要:首先暴力搜索: public final int maxSubArray1(int[] nums) { int max = Integer.MIN_VALUE; for (int i = 0; i < nums.length; i++) { for (int j = 0; j < nums.leng 阅读全文
posted @ 2020-05-14 23:53 牛有肉 阅读(232) 评论(0) 推荐(0) 编辑
摘要:看到题目,一个变种的八皇后,在矩阵中寻找路径。 关于回溯的思路在博客: Burst Balloons(leetcode戳气球,困难)从指数级时间复杂度到多项式级时间复杂度的超详细优化思路(回溯到分治到动态规划 ) 中有非常详细的描述。 本题优化时间复杂度的关键在于剪枝,当越界、字符不匹配、路径已走过 阅读全文
posted @ 2020-05-14 00:21 牛有肉 阅读(344) 评论(0) 推荐(0) 编辑
摘要:* @Description 将一条绳子剪成任意 m 段,m 大于 1 ,求最大积 * 决定问题规模的参数为绳子的长度 n * 按 n 进行分治,G( n ) 为长度为 n 的绳子分割后可得的最大积,可列出状态转移方程: * G( n ) = max { G(n-1)*1 , G(n-2)*2... 阅读全文
posted @ 2020-05-13 00:24 牛有肉 阅读(331) 评论(0) 推荐(0) 编辑
摘要:一道简单题目,DP 的递归表示竟然无法 AC,只能用递推表示。解题思路: * @Description nums 长度决定为题规模 * 按 nums 长度区间进行分治 * G(i) 代表前 i 个元素中可得的最大分钟数 * 因为题目要求,相邻元素不能选取,所以要确定 G(i-1) 与 G(i) 的关 阅读全文
posted @ 2020-05-12 11:13 牛有肉 阅读(217) 评论(0) 推荐(0) 编辑
摘要:题目非常简单,之所以记录一下是因为总是忽略中序遍历的特性:排序二叉树中序遍历会得到一个有序数组。该特性很实用也很神奇,就像一颗满二叉排序树的根节点必然是对应有序数组的中点一样。该特性可以帮助我们更好的理解排序树的结构。 List<Integer> re=new LinkedList<Integer> 阅读全文
posted @ 2020-05-11 00:28 牛有肉 阅读(206) 评论(0) 推荐(0) 编辑
摘要:很多清奇的解法不是靠拍脑袋一蹴而就的,而是随着传统解法一步一步优化来的。刷题时不需要经常焦虑自己没有创新毒辣的解题思路,应该从传统解法开始,考虑当前解法有什么可优化的点,并去实现它们。 最容易想到的自然是暴力法,我们假设每个元素都可以作为买入元素的前提下,再假设在其之后的每个元素尝试卖出,纪录最大差 阅读全文
posted @ 2020-05-11 00:22 牛有肉 阅读(268) 评论(0) 推荐(0) 编辑
摘要:两种解法,DFS 与 BFS ,均已通过。对于 DFS 来说,我们需要从右到左遍历所有节点,并在每次遍历时记录当前深度。如果当前深度与结果数组长度相同,则为该层可以右视到的节点: /** * @Author Nxy * @Date 2020/5/9 * @Description DFS 解法 */ 阅读全文
posted @ 2020-05-09 17:32 牛有肉 阅读(259) 评论(0) 推荐(0) 编辑
摘要:最开始使用 DP ,因为题目中给的问题空间范围较大,缓存使用数组的话对连续的内存空间要求过高。故采用 hash 表做缓存: public int maxScore(int[] cardPoints, int k) { int length = cardPoints.length; Map<Strin 阅读全文
posted @ 2020-05-08 21:21 牛有肉 阅读(300) 评论(0) 推荐(0) 编辑
摘要:一个中等难度的 dp 题目,矩阵的长宽决定了问题规模的大小。问题的定义是在矩阵 A 中一层一层的下降,这个定义本身便具有最优子结构性质。 我们在第 i 层想要下降到 i+1 层有三种选择,走左边 j-1 ,走中间 j ,走右边 j+1 ,我们取三者的最小值即可。 设 G( i,j ) 为计算 从坐标 阅读全文
posted @ 2020-05-08 16:46 牛有肉 阅读(212) 评论(0) 推荐(0) 编辑
摘要:题目如上,一个背包类 dp 问题。感觉该题的解题思路算是相当经典了,小记一下。 做这个题有如下感悟: 1、dp 是一个运筹学问题,做题时不要忽略方程的本质:用小问题表示大问题,用函数表示函数。大问题可以用小问题表示,反过来,小问题的组合可以合并为大问题。在多维 dp 中要尤其注意,这可以帮助我们将一 阅读全文
posted @ 2020-05-03 00:09 牛有肉 阅读(277) 评论(0) 推荐(0) 编辑