LeetCode
文章平均质量分 85
HerofH_
加油啊咸鱼!
展开
-
旋转数组的最小值(二分法)
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。题目分析 根据题目,非减排序意思就是相邻两元素中左边元素时小于等于右边的,关...原创 2019-03-05 22:42:56 · 1088 阅读 · 0 评论 -
前缀树(字典树)应用——实现 Trie (前缀树)、添加与搜索单词
目录1 前缀树原理简介2 实现前缀树2.1 题目描述2.2 题目分析2.3 代码实现3 添加与搜索单词3.1 题目描述3.2 题目分析3.3 代码实现4 总结1 前缀树原理简介 先来简单介绍一下前缀树是什么。前缀树也叫字典树,常用语字符串的查找,为什么又叫前缀树呢?我们先来看看前缀树长什么样子: ...原创 2019-01-24 22:35:39 · 1627 阅读 · 0 评论 -
二叉树的最大路径和
目录1 题目描述2 题目分析3 代码实现1 题目描述给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 6示例 2:输入: [-10,9,20,null,...原创 2019-01-20 13:21:53 · 12792 阅读 · 0 评论 -
二叉搜索树中第K小的元素
目录1 题目描述2 题目分析3 代码实现3.1 中序遍历方法3.2 结点计数方法1 题目描述给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \ 1 ...原创 2019-01-20 09:51:32 · 2212 阅读 · 0 评论 -
除自身以外数组的乘积
目录1 题目描述2 题目分析3 代码实现1 题目描述给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。进阶:...原创 2019-01-15 21:08:17 · 511 阅读 · 0 评论 -
最长回文子串——动态规划及Manacher算法解决
目录1. 题目描述2. 题目分析2.1 动态规划法2.1.1 原理分析2.1.2 代码实现2.1.3 复杂度分析2.2 Manacher算法2.2.1 原理分析2.2.2 代码实现2.2.3 复杂度分析1. 题目描述给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输...原创 2019-01-15 00:00:01 · 1230 阅读 · 0 评论 -
(查找表)存在重复元素I、II、III
1.存在重复元素 I1.1 题目描述1.2 题目分析1.3 代码实现2.存在重复元素 II2.1 题目描述2.2 题目分析2.3 代码实现3.存在重复元素 III3.1 题目描述3.2 题目分析3.3 代码实现1.存在重复元素 I1.1 题目描述 给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 ...原创 2019-01-11 17:34:51 · 784 阅读 · 0 评论 -
Top K 问题的解决方案
1.类选择排序法1.1 代码实现1.2 复杂度分析2.快速排序法2.1 代码实现2.2 复杂度分析3.堆排序法3.1 代码实现3.2 复杂度分析4. 方法比较 Top K是很常见的一种问题,是指在N个数的无序序列中找出最大的K个数,而其中的N往往都特别大,对于这种问题,最容易想到的办法当然就是先对其进行排序,然后直接取出最大的K的元素就行了,但是...原创 2019-01-10 16:39:23 · 25597 阅读 · 1 评论 -
(二叉树)高度平衡二叉树的判定
题目描述给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。题目分析由题意可知,高度平衡二叉树是指树上每个结点的左右两个子树的高度差的绝对值都不超过1。那么就可以采取以下思路:首先递归每个结点,然后对每个结点而言,得出其左右子树的高度,比较二者高度差绝对值是否超过1,如果没有超过1,说明当前结点是符合...原创 2019-01-05 14:33:50 · 5465 阅读 · 1 评论 -
(二叉树)二叉搜索树的查找、插入和删除
1.二叉搜索树简介二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉搜索树。二叉搜索树的特点之一即是其中序遍历为升序。2.二叉搜索树的查找根据二叉搜索树的性质,每个结点的值都是大于其左子结点值(左子结点非空)并且小于其右子结点值(右子...原创 2019-01-05 12:41:34 · 2162 阅读 · 1 评论 -
(二叉树)二叉树的序列化与反序列化
题目描述序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。说明: 不要使用类的成员 / 全局...原创 2019-01-03 23:13:43 · 2431 阅读 · 0 评论 -
(二叉树)二叉树的最近公共祖先
题目描述给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,...原创 2019-01-03 19:38:59 · 28574 阅读 · 17 评论 -
摩尔投票算法:找出数组中出现次数大于n/2、n/3的数
题目描述给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/2⌋ 次的元素。说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1)。题目分析其实对于这道题目,我的第一反应是利用map来记录每个元素出现的次数,然后判断当前元素出现的次数是否达到要求,但是这样就多使用了O(N)的辅助空间,与题目中要求的O(1)空间相悖,那么该怎么求解呢?其实对于这类题目最为简便的算法即是摩尔...原创 2018-12-23 23:02:16 · 2566 阅读 · 0 评论 -
二维数组中的查找(O(mlogn)及O(m+n))
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。题目分析根据题目可知,数组的每一行以及每一列都是有序的,对于有序数组的查找,最有效的当然就是二分查找了,二分查找不必多说,不过在这里由于每一行都需要查找一次,那么复杂度就为O(mlogn),直...原创 2018-12-23 18:40:54 · 919 阅读 · 0 评论 -
(二叉树)从前序与中序遍历构造树
题目描述根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:[3,9,20,null,null,15,7]题目分析详细分析类比 https://blog.csdn.net/qq_28114615/article/...原创 2018-12-21 22:37:21 · 161 阅读 · 0 评论 -
(二叉树)从中序和后序遍历构造树
题目描述根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树:[3,9,20,null,null,15,7]题目分析对于树,只要给定树的中序遍历+前序遍历或者中序遍历+后序遍历结果,那么就一定能够构造出树的结构。...原创 2018-12-21 22:03:23 · 2586 阅读 · 0 评论 -
(队列应用——广度优先遍历)01矩阵
题目描述给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。两个相邻元素间的距离为 1 。示例 1:输入:0 0 00 1 00 0 0输出:0 0 00 1 00 0 0示例 2:输入:0 0 00 1 01 1 1输出:0 0 00 1 01 2 1注意:给定矩阵的元素个数不超过 10000。给定矩阵中至少有一个元素是 0。矩阵...原创 2018-12-17 20:48:53 · 1269 阅读 · 0 评论 -
(二叉树)(栈应用)二叉树的中序遍历
题目描述题目就不用多说了,即是对二叉树进行左-根-右的中序遍历。题目分析不管是对二叉树进行中序遍历,还是前序或者后序遍历,最简单的方法也是最容易想的方法就是递归,递归代码如下:vector<int> inorderTraversal(TreeNode* root) { vector<int> result; run_LVR(root,...原创 2018-12-12 21:01:58 · 1975 阅读 · 0 评论 -
(栈应用)每日温度
题目描述Given a list of daily temperatures T, return a list such that, for each day in the input, tells you how many days you would have to wait until a warmer temperature. If there is no future day for ...原创 2018-12-11 23:03:23 · 648 阅读 · 0 评论 -
(双指针应用)盛水最多的容器
题目描述给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(...原创 2018-12-08 21:10:02 · 195 阅读 · 0 评论 -
Z字形变换算法分析及优化(O(k*n)到O(n))
题目描述将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字符串进行指定行数变换的函...原创 2018-12-08 19:39:53 · 492 阅读 · 0 评论 -
带环链表的环入口、环长度、链表总长
题目描述给定一个链表,判断链表是否有环,如果有那么找出环的入口结点,如果没有那么返回Null。题目分析题目很清晰,即是要先判断一个链表是否有环,没有的话找出环的入口。因此第一个问题是先判断链表是否有环。判断链表是否带环其实很简单,最常用的方法是双指针法。想象一下,如果两个人在环形赛道上跑步,那么不管他们之前的起点位置如何,跑得快的必将与跑得慢的相遇。在该题中,直接使用快慢指针,慢指针步长为...原创 2018-12-04 14:37:15 · 478 阅读 · 0 评论 -
Pow(x,n)的O(logN)时间复杂度实现
题目描述实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明:-100.0 < x < 100.0n 是 ...原创 2018-12-03 10:16:22 · 5679 阅读 · 0 评论 -
初级算法(动态规划篇):初级例题分析与总结
例1 爬楼梯题目描述You are climbing a stair case. It takes n steps to reach to the top.Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?Note: Given n will ...原创 2018-11-28 14:12:59 · 257 阅读 · 0 评论 -
(二叉树):二叉树层次遍历
题目描述Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).For example:Given binary tree [3,9,20,null,null,15,7],39 20x x 15 7re...原创 2018-11-27 10:01:02 · 211 阅读 · 0 评论 -
(二叉树):验证二叉搜索树
题目描述:Given a binary tree, determine if it is a valid binary search tree (BST).Assume a BST is defined as follows:The left subtree of a node contains only nodes with keys less than the node’s key.T...原创 2018-11-26 22:23:34 · 409 阅读 · 0 评论 -
初级算法(字符串篇):报数
题目描述:The count-and-say sequence is the sequence of integers with the first five terms as following:1112112111112211 is read off as “one 1” or 11.11 is read off as “two 1s” or ...原创 2018-11-19 10:32:56 · 152 阅读 · 0 评论 -
初级算法(数组篇):只出现一次的数字(经典的异或操作)
题目描述:Given a non-empty array of integers, every element appears twice except for one. Find that single one.Note:Your algorithm should have a linear runtime complexity. Could you implement it withou...原创 2018-11-14 09:46:57 · 378 阅读 · 0 评论 -
初级算法(链表篇):判断一个链表是否为回文链表
题目描述:Given a singly linked list, determine if it is a palindrome.Example 1:Input: 1-&amp;gt;2Output: falseExample 2:Input: 1-&amp;gt;2-&amp;gt;2-&amp;gt;1Output: trueFollow up:Could you do it in O(n) time an...原创 2018-11-13 10:13:29 · 1654 阅读 · 0 评论 -
初级算法(链表篇):合并两个有序链表
题目描述:Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.Example:Input: 1-&amp;gt;2-&amp;gt;4, 1-&amp;gt;3-&amp;gt;4Output:...原创 2018-11-13 09:39:08 · 230 阅读 · 0 评论 -
初级算法(链表篇):删除链表的倒数第N个结点
题目描述:Given a linked list, remove the n-th node from the end of list and return its head.Example:Given linked list: 1-&gt;2-&gt;3-&gt;4-&gt;5, and n = 2.After removing the second node from the end,...原创 2018-11-13 08:54:40 · 1288 阅读 · 0 评论