![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
文章平均质量分 73
weixin_38744693
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 19. 正则表达式匹配
剑指 Offer 19. 正则表达式匹配请实现一个函数用来匹配包含'. '和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但与"aa.a"和"ab*a"均不匹配。思路模式串p中包含三种可能的字符,*,.,正常字符。假设有状态dp[i][j],代表p[0..j]和s[0..i]是否能够匹配。设s[i]和p[j]为当前匹配过程中,源串原创 2021-02-24 09:07:53 · 57 阅读 · 0 评论 -
数组中的逆序对
数组中的逆序对解题思路归并排序归并排序将数组分割为若干有序的子段,并进行两两“向上”合并。在一次归并过程中,第一段数组和第二段数组均为有序的,只需要统计归并过程中数组中==“失序”==的数组元素就能够得到逆序对数。假设p1和p2分别指向第一段数组A和第二段数组B的起始位置,且数组AB归并到数组C中。则存在两种不同的统计方式。统计方式1:倘若A[p1]<B[p2]A[p1]<B[p2]A[p1]<B[p2],选择A[p1]A[p1]A[p1]作为下一个归并到数组C中的元素,易知A原创 2021-02-20 21:38:11 · 93 阅读 · 0 评论 -
重建二叉树
重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。思路递归法重建二叉树Map<Integer,Integer>来确定根节点在中序序列中的位置,以区分左右子树,indexMap.put(inorder[i],i)计算左右子树的的结点个数,leftNodes=inorderStart-rootIndex , rightNodes=inorderEnd-rootIndex迭代法重建二叉树 用栈保存已访问的前序序原创 2021-02-20 08:36:53 · 73 阅读 · 0 评论 -
环形链表
环形链表 II题意给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos是 -1,则在该链表中没有环。注意,pos仅仅是用于标识环的情况,并不会作为参数传递到函数中。思路定义指针slow和fast,初始化为链表的头部。slow每次向后移动一个结点,fast每次向后移动两个结点。如果链表中存在环,两个指针就会相遇。两个指针相遇后,在额外使用一个指针ptr,指向链表的头原创 2021-02-20 08:36:38 · 96 阅读 · 1 评论 -
链表排序
排序链表题意给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。进阶:你可以在 O(nlogn)O(n log n)O(nlogn) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?思路方法一:自顶向下归并排序找到链表的中点,以中点为分界,将链表拆分成两个子链表。寻找链表的中点可以使用快慢指针的做法,快指针每次移动2步,慢指针每次移动1步,当快指针到达链表末尾时,慢指针指向的链表节点即为链表的中点。对两个子链表分别排序。将两个排序后的子链表合并,得到原创 2021-02-20 08:37:06 · 53 阅读 · 0 评论 -
二维数组的查找
二维数组中的查找题目在一个 $n * m $的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路由题意可得,矩阵从上到下,从左到右,都是递增的。在一维数组中,递增序列可以使用 二分查找 快速定位元素,但题目中给出的是二维矩阵,且虽然二维矩阵在内存中的表示是一维形式的,但这个数组也并不是递增的,也无法应用二分查找常用的快速查找算法有,二叉树搜索,哈希等。二叉搜索树有 左子结点小于根原创 2021-02-20 08:36:14 · 56 阅读 · 0 评论 -
寻找两个正序数组的中位数
寻找两个正序数组的中位数题意给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。进阶:你 能设计一个时间复杂度为 $O(log (m+n)) $的算法解决此问题吗?思路取两个数组第k个元素假设存在两个数组A,BA,BA,B,A[k/2−1]A[k/2-1]A[k/2−1]和B[k/2−1]B[k/2-1]B[k/2−1]前有[0⋯k/2−2][0 \cdots k/2-2][0⋯k/2−2],各有k/2−1k/2-1k/2−1个元原创 2021-02-19 09:21:23 · 66 阅读 · 0 评论 -
零钱兑换
322. 零钱兑换题意给定不同面额的硬币 coins和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。思路记忆化搜索定义F(S)F(S)F(S) 为组成金额SSS所需要最小的硬币数。定义[c0,…,cn−1][c_0,\dots,c_{n-1}][c0,…,cn−1] 为可供选择的硬币面额存在如下转移方程F(S)=mini=0⋯n−1F(S−ci)+1subject原创 2021-02-19 09:20:21 · 56 阅读 · 0 评论