关于KMP的next函数的原理分析

KMP是上学期学数据结构时候学的,当时就没学太明白,后来又自己琢磨了几次,但始终是一知半解。今天起床了又想起来KMP,以下是思考得到的一点东西。 首先学过kmp的都知道要写两个函数,一个计算next数组,一个kmp主体函数,那么next数组里存的到底是啥呢。首先答案是:next[i]存的是字符串[...

2019-03-28 19:56:33

阅读数 97

评论数 0

206. 反转链表

Q: 反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL A: 迭代就不说了,保存当前节...

2019-08-17 21:10:22

阅读数 1

评论数 0

200.岛屿数量

from collections import deque class Solution: def numIslands(self, grid) -> int: m=len(grid) if not m: return ...

2019-08-17 00:34:41

阅读数 2

评论数 0

173. 二叉搜索树迭代器

Q: 实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。 调用 next() 将返回二叉搜索树中的下一个最小的数。 示例: BSTIterator iterator = new BSTIterator(root); iterator.next(); // 返回 3 itera...

2019-08-16 19:50:19

阅读数 1

评论数 0

172. 阶乘后的零

Q: 给定一个整数 n,返回 n! 结果尾数中零的数量。 示例 1: 输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零。 示例 2: 输入: 5 输出: 1 解释: 5! = 120, 尾数中有 1 个零. 说明: 你算法的时间复杂度应为 O(log n) 。 A: 5乘2才能得到10...

2019-08-16 19:28:24

阅读数 1

评论数 0

189. 旋转数组

Q: 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 示例 1: 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右旋转 1 步: [7,1,2,3,4,5,6] 向右旋转 2 步: [6,7,1,2,3,4,5] ...

2019-08-16 03:04:59

阅读数 6

评论数 0

162. 寻找峰值

Q: 峰值元素是指其值大于左右相邻值的元素。 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。 数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。 你可以假设 nums[-1] = nums[n] = -∞。 示例 1: 输入: ...

2019-08-14 15:38:19

阅读数 5

评论数 0

128. 最长连续序列

Q: 给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)。 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。 A: 注意一点,题目说的序列长度是有几个连续+1的数。 然后题...

2019-08-11 00:43:18

阅读数 5

评论数 0

103. 二叉树的锯齿形层次遍历

常规思路:每层的队列正常处理,隔一行计算结果时反转加入结果数组 class Solution: def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]: res=[] if n...

2019-08-10 01:37:14

阅读数 5

评论数 0

174. 地下城游戏

Q: 一些恶魔抓住了公主(P)并将她关在了地下城的右下角。地下城是由 M x N 个房间组成的二维网格。我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻降至 0 或以下,他会立即死亡。 有些房间由...

2019-08-08 21:26:58

阅读数 43

评论数 0

140. 单词拆分 II

Q: 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。 说明: 分隔时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。 示例 1: 输入: s = “catsanddog”...

2019-08-08 14:37:11

阅读数 10

评论数 0

132. 分割回文串 II

Q: 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。 返回符合要求的最少分割次数。 示例: 输入: “aab” 输出: 1 解释: 进行一次分割就可将 s 分割成 [“aa”,“b”] 这样两个回文子串。 A: 1.我最开始想到了要两次DP,先算一个是否是回文数的dp数组,再算...

2019-08-07 23:36:30

阅读数 10

评论数 0

123. 买卖股票的最佳时机 III

class Solution: def maxProfit(self, prices) -> int: l=len(prices) if l<2: return 0 res=0 ...

2019-08-07 21:09:47

阅读数 36

评论数 0

121. 买卖股票的最佳时机

Q: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。 注意你不能在买入股票前卖出股票。 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = ...

2019-08-07 12:59:47

阅读数 11

评论数 0

115. 不同的子序列

知道是DP,但就是找不到递推方程,只好拿递归做,从左遍历,遇到第一个匹配的开始对之后的两个字符串递归,复杂度应该是O(N!),指数级的,第51个用例过不去了。 DP[i] [j]表示由s的前i个元素组成的序列A中有多少由t前j个元素组成的序列B。 首先若s的前i-1序列包含t的前j序列,那么s的前...

2019-08-07 00:47:06

阅读数 10

评论数 0

95. 不同的二叉搜索树 II、96. 不同的二叉搜索树

Tg:递归 这题不能算DP吧,就是递归 一个问题:每次的树都要新建,不能共用一个根节点,否则下次遍历对根左右子树的改动会把已经放进结果数组中的树改掉。。 class Solution: def generateTrees(self, n: int): def fun...

2019-08-06 18:59:19

阅读数 27

评论数 0

91. 解码方法

Tg:DP 都在注释里 class Solution: def numDecodings(self, s: str) -> int: l=len(s) if l==0: return 0 if l==1...

2019-08-06 16:44:16

阅读数 61

评论数 0

53. 最大子序和

Tg:动规 第一次做法:对于从i开始的最大子序和,要么是nums[i]加上从i+1开始的最大子序和,要么是nums[i]自己(i+1的最大子序和小于等于0),故考虑从右侧往左侧遍历,算出最大子序和即可。 class Solution: def maxSubArray(self, nums:...

2019-08-06 16:42:06

阅读数 10

评论数 0

84. 柱状图中最大的矩形

分治法,但PYTHON还是超时,因为有个巨长的有序测试数据,此时分治变O(N2)过不去。。 class Solution: def largestRectangleArea(self, heights) -> int: return recur(heights...

2019-08-06 13:14:18

阅读数 10

评论数 0

85. 最大矩形

这题用到了前面84的思路,我先计算了一个数组,记录每一行从当前元素起有几个连续的1。然后对于每一列(从右到左,不过其实想想从左到右也没区别,当时想多了)把行数0~n-1作为横坐标,每个元素对应的连续1的长度作为高度,整体逆时针旋转90度就变成了84题求柱状图最大矩形的问题。对于每一列用递增栈O(N...

2019-08-06 01:59:01

阅读数 16

评论数 0

提示
确定要删除当前文章?
取消 删除