中间那部分反转实际上就比较简单,操作 right-left+1次即可,而前边的left可能是1,所以这里需要构建一个dummy头来避免一些问题即可。/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func reve...
SnowKagura‘s blog
直面生活,热爱生活这道题目只保证了矩阵从左到右、从上到下分别是单调递增,没有保证全局,所以没办法将下标映射成一维数组来做,但是矩阵的右上角和左下角保证了往不同的两个方向移动...
这两道题虽然粗看感觉挺简单的,但是需要考虑到的东西比较多,比如如果用dfs,需要通过记忆之前计算的答案进行剪枝,否则时间复杂度是指数级别,会导致超时,用动态规划的话反而简单许多。最小路径和dfs做法如下func minPathSum(grid [][]int) int { n := len(grid) m := len(grid[0]) memo := make([]...
最长公共子序列(LCS)定义 dpi 为 text1[0..i-1]和text2[0..j-1]的最大公共子序列,那么有转移方程如下:其实这个也非常的好理...
我们知道 $x^y$ 其实就是 x 乘了 y 次,但是我们如何减少乘的次数来节省时间复杂度呢?其实可以让 y 每次都减半,x 基数变大即可。比如 $2^{32}=4^{16}=16^8=256^{4}=...$这样实际上就减少了很多次乘法,从原先的 $y$ 次变成了 $log2y$ 次乘法这其实就是快速幂的思想,可以应用在单个实数乃至矩阵乘法上。将这个思路化作代码就如同下面这样:for y ...