LeetCode
xk_一步一步来
一步一步
展开
-
最长递增子序列
问题给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱)。例如:给定一个长度为6的数组A{5, 6, 7, 1, 2, 8},则其最长的单调递增子序列为{5,6,7,8},长度为4. 解法1:最长公共子序列法这个问题可以转换为最长公共子序列问题。如例子中的数组A{5,6, 7, 1, 2, 8},则我们排序该数组得到数组A‘{1, 2, 5, 6, ...转载 2019-08-30 16:35:24 · 146 阅读 · 0 评论 -
LeetCode075——颜色分类(荷兰国旗/三色排序)
1.荷兰国旗问题:数组只包含0,1,2对其排序(1)首先最简单的就是计数排序,当然这里不讨论,一般情况下考察的都不是这个(2)和快排划分过程相似:时间O(n),空间O(1)。快排划分的时候有个标志位 i=left-1,如果a[j]>x,j++,i++否则j++,i++,a[j] a[i]互换位置.而该题目可以设置两个标志位,i,j,一个在最左边一个在最右边。对于数组a[0~n-1],初...原创 2019-03-23 20:45:06 · 219 阅读 · 0 评论 -
LeetCode048——旋转图像
https://leetcode-cn.com/problems/rotate-image/solution/xuan-zhuan-tu-xiang-by-leetcode/旋转图像给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 :给定 matrix =...转载 2019-06-12 09:52:32 · 199 阅读 · 0 评论 -
LeetCode236——二叉树的最近公共祖先
https://blog.csdn.net/qq_28114615/article/details/85715017题目描述给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: ...转载 2019-06-11 20:57:53 · 122 阅读 · 0 评论 -
LeetCode239——滑动窗口最大值
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,...转载 2019-06-14 23:41:36 · 419 阅读 · 0 评论 -
LeetCode287——寻找重复数
https://blog.csdn.net/whdAlive/article/details/80459730二分法给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间,包括 1 和 n ,可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 212示例 2:输入: [3,1,3,4,2]输...转载 2019-06-14 20:47:00 · 199 阅读 · 0 评论 -
DFS
https://blog.csdn.net/qq_40763929/article/details/81629800转载 2019-06-13 19:56:51 · 149 阅读 · 0 评论 -
Java单链表反转 详细过程
https://blog.csdn.net/guyuealian/article/details/51119499(一)单链表的结点结构: data域:存储数据元素信息的域称为数据域; next域:存储直接后继位置的域称为指针域,它是存放结点的直接后继的地址(位置)的指针域(链域)。 dat...转载 2019-06-13 16:30:10 · 28186 阅读 · 2 评论 -
LeetCode221——最大正方形
题目链接:https://leetcode-cn.com/problems/maximal-square/题目描述在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4思路动态规划问题。设二维数组dp[m][n],其中dp[i][j]表示以坐标(i,...转载 2019-06-13 15:41:59 · 150 阅读 · 0 评论 -
Queue与Deque(队列与双端队列)
一.Java中的队列队列可以让人们有效地在尾部添加一个元素,在头部删除一个元素。有两个端头的队列,即双端队列,可以让人们有效地在头部和尾部同时添加或删除元素。不支持在队列中间插入元素。在Java SE6中引入了Deque接口,并由ArrayDeque和LinkedList类实现。这两个类都提供了双端队列,而且在必要时可以增加队列的长度。二.常见的接口与类Queue//如果队列没有...转载 2019-07-02 17:05:52 · 403 阅读 · 0 评论 -
滑动窗口通用思想解决子串问题(438. 找到字符串中所有字母异位词)
https://leetcode-cn.com/problems/find-all-anagrams-in-a-string/solution/hua-dong-chuang-kou-tong-yong-si-xiang-jie-jue-zi-/本文详解「滑动窗口」这种高级双指针技巧的算法框架,带你秒杀几道难度较大的子字符串匹配问题:76. 最小覆盖子串438. 找到字符串中所有字母异位词...转载 2019-06-28 09:19:26 · 1251 阅读 · 0 评论 -
LeetCode416 ——分割等和子集
https://blog.csdn.net/Jeff_Winger/article/details/81674508 主要的思想来源于0/1背包问题,解决方法是动态规划。我们可以想到,把数组分割成两份,并且和相等,那么每一份的和是总和的一半。那么问题就可以转化为找到一组数,使得他们的和逼近sum/2,最后判断最大的和是否等于sum/2,如果是则...转载 2019-06-28 18:21:47 · 138 阅读 · 0 评论 -
最长公共子序列(JAVA实现)
题目标题:* 计算两个字符串的最长公共子序列的长度,字符不区分大小写。* 输入描述:输入两个字符串,分两行输入。* 输出描述:输出一个整数。* 示例:* 输入:* 12asdfa* we2rasdaswer* 输出:6 LCS是Longest Common Subsequence的缩写,即最长公共子序列。一个序列,如果是两个或...转载 2019-08-28 16:50:39 · 791 阅读 · 0 评论 -
LeetCode301 —— Remove Invalid Parentheses
https://blog.csdn.net/qq508618087/article/details/50408894题目链接:https://leetcode.com/problems/remove-invalid-parentheses/Remove the minimum number of invalid parentheses in order to make the input ...转载 2019-06-30 23:32:18 · 123 阅读 · 0 评论 -
并查集
https://blog.csdn.net/niushuai666/article/details/6662911例子就是杭电上的畅通工程:http://acm.hdu.edu.cn/showproblem.php?pid=1232首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点,让你判断它们是...转载 2019-07-13 21:26:19 · 106 阅读 · 0 评论 -
Leetcode 题解——汇总篇
本文从 Leetcode 中精选大概 200 左右的题目,去除了某些繁杂但是没有多少算法思想的题目,同时保留了面试中经常被问到的经典题目。算法思想双指针排序贪心思想二分查找分治搜索动态规划数学数据结构相关链表树栈和队列哈希表字符串数组与矩阵图位运算参考资料LeetcodeWeiss M A, 冯舜玺. 数据结构与算法分析——C 语言描述[J]. ...转载 2019-07-13 21:20:22 · 1236 阅读 · 0 评论 -
最长回文子串
https://blog.csdn.net/Bob__yuan/article/details/81431484Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.Example...转载 2019-07-13 21:01:31 · 91 阅读 · 0 评论 -
581. 最短无序连续子数组
https://leetcode-cn.com/problems/shortest-unsorted-continuous-subarray/solution/zong-jie-liao-san-chong-xiang-fa-by-xiaobaik/解法有三:寻找就位元素,从star到end,如果数组的最大最小值,分别再两头,那么是就位元素,之后缩短star和end,出现未就位元素可分为三...转载 2019-07-13 20:12:31 · 138 阅读 · 0 评论 -
394-字符串解码
https://blog.csdn.net/LaputaFallen/article/details/80025486 DescriptionGiven an encoded string, return it’s decoded string.The encoding rule is: k[encoded_string], where the encoded_string inside t...转载 2019-07-13 15:38:46 · 152 阅读 · 0 评论 -
347_前K个高频元素(Top-K-Frequent-Elements)
https://blog.csdn.net/x273591655/article/details/84001236转载 2019-07-13 15:14:50 · 89 阅读 · 0 评论 -
LeetCode207——课程表
定义:直接copy一下 百科上面的吧:对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序...转载 2019-06-13 14:01:43 · 85 阅读 · 0 评论 -
LeetCode114—— 二叉树展开为链表
/*114. 二叉树展开为链表 给定一个二叉树,原地将它展开为链表。 例如,给定二叉树 1 / \ 2 5 \ 4 将其展开为: 1 \ 2 \ 4 \ 5 * */ // 他法:在还没操作节点右子树前,不能破坏该节点的右子树指向。所以采用后序遍...转载 2019-06-13 10:37:41 · 274 阅读 · 0 评论 -
LeetCode376—— 摆动序列
题目如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5]和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最...原创 2019-04-23 15:02:17 · 192 阅读 · 0 评论 -
LeetCode455——分发饼干
题目假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:...原创 2019-04-23 14:33:03 · 79 阅读 · 0 评论 -
从零开始学回溯算法
转自:https://blog.csdn.net/qq_32400847/article/details/51474105本文在写作过程中参考了大量资料,不能一一列举,还请见谅。回溯算法的定义:回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。解题的一般步骤是:1.定义一个解空间,它包含问题的解;2.利用适...转载 2019-04-20 20:57:12 · 283 阅读 · 0 评论 -
回溯算法超通俗易懂详尽分析和例题
转自:https://blog.csdn.net/sinat_27908213/article/details/80599460 回溯法是很重要的一种算法,在it企业笔试中经常会遇到。事实上,在各种编程题中,大家或多或少都会接触到这些题目,但是很多人没有对这类题目有个系统性的总结。接下来就对回溯法进行详...原创 2019-04-20 20:50:02 · 601 阅读 · 1 评论 -
LeetCode089——格雷编码
原题链接:https://leetcode-cn.com/problems/gray-code/题目描述:知识点:递归、回溯思路:回溯法寻找格雷码本题是常规的回溯算法题。需要注意的一点是,本题并不要求寻找所有的格雷码组合,所以一旦寻找到了一个格雷码,立即break跳出for循环。如果要找出所有的格雷码,其时间复杂度是很高的。因为有break跳出循环,所以时间复杂度不好分析,但在最差情...原创 2019-04-20 20:27:03 · 142 阅读 · 0 评论 -
LeetCode008——字符串转整数(atoi)
原题链接:https://leetcode-cn.com/problems/string-to-integer-atoi/description/题目描述:知识点:字符串思路:顺序遍历字符串,根据题意读取整数对于这一题来说,难点不在算法的实现上,难点在理解题意并正确处理各种边界或者特殊情况上。(1)如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这...原创 2019-04-20 20:24:56 · 112 阅读 · 0 评论 -
LeetCode 402——移掉K位数字
题目给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。注意:num 的长度小于 10002 且 ≥ k。num 不会包含任何前导零。示例 1 :输入: num = “1432219”, k = 3输出: “1219”解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。示例 2 :输入: num = “10200”...原创 2019-04-23 15:42:35 · 156 阅读 · 0 评论 -
LeetCode055——跳跃游戏
原题链接:https://leetcode-cn.com/problems/jump-game/description/题目描述:知识点:贪心算法思路:每次选取下一步位置时,选取所能达到最远的那个位置本题的思路和LeetCode045——跳跃游戏II可以说是一模一样,但是需要注意以下几个细节。(1)如果nums数组的长度为1,直接返回true。(2)如果nums数组的长度不为1且nu...原创 2019-04-23 16:22:24 · 170 阅读 · 0 评论 -
LeetCode045——跳跃游戏II
原题链接:https://leetcode-cn.com/problems/jump-game-ii/description/题目描述:知识点:贪心算法思路一:回溯法(在LeetCode中提交会超时)回溯法的思想很简单,寻找到所有能到达数组的最后一个位置的可能路径,计算其最短值即可。由于是穷举,其时间复杂度是很高的,达到了O(nums[0] + nums[1] + nums[2] + ....转载 2019-04-23 17:34:54 · 126 阅读 · 0 评论 -
LeetCode139——单词拆分
https://leetcode-cn.com/problems/word-break/solution/dan-ci-chai-fen-by-leetcode/§ 方法 1:暴力算法最简单的实现方法是用递归和回溯。为了找到解,我们可以检查字典单词中每一个单词的可能前缀,如果在字典中出现过,那么去掉这个前缀后剩余部分回归调用。同时,如果某次函数调用中发现整个字符串都已经被拆分且在字典中出现过...转载 2019-06-13 10:35:15 · 158 阅读 · 0 评论 -
LeetCode146——LRU缓存机制
https://blog.csdn.net/qq_41231926/article/details/86173740原题链接:https://leetcode-cn.com/problems/lru-cache/description/题目描述:知识点:哈希表、双向链表、LRU缓存机制思路一:用哈希表记录键值对,用双向链表处理LRU缓存机制用示例来说明我们算法的流程,为了防止对null...转载 2019-04-19 19:18:55 · 159 阅读 · 0 评论 -
LeetCode汇总
https://github.com/617076674/LeetCode原创 2019-04-19 14:54:37 · 357 阅读 · 0 评论 -
LeetCode004——两个排序数组的中位数
https://blog.csdn.net/qq_41231926/article/details/81805795原题链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/description/题目描述:知识点:二分查找,分治算法思路一:设两个指针依次从小到大遍历两个有序数组,得到中位数这是我的第一个想法,求...转载 2019-04-19 14:53:41 · 386 阅读 · 0 评论 -
LeetCode043——字符串相乘(2)
优雅的写法,这样的写法一遍就可以写出bug free的代码。思路:1 翻转string2 建立数组,双层循环遍历两个string,把单位的乘积累加到数组相应的位置3 处理进位并输出4 注意前导零的corner casepackage Level4; /** * Multiply Strings * * Given two numbers represented as s...原创 2019-04-19 14:04:27 · 128 阅读 · 0 评论 -
LeetCode043——字符串相乘
1. 题目描述题目链接给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = “2”, num2 = “3”输出: “6”示例 2:输入: num1 = “123”, num2 = “456”输出: “56088”说明:num1 和 num2 的长度小于110。num1 ...原创 2019-04-19 14:01:38 · 118 阅读 · 0 评论 -
Comparator比较数组之间的大小
int[][] array = new int[10][2];比较array的每一行之间的大小,根据每一行的第二个元素的大小,也就是根据[][1]的大小进行比较Arrays.sort(points,new Comparator<int[]>() {//右端点排序 public int compare(int[] a, int[] b){ return a[1]-b[1]; ...原创 2019-04-23 20:08:51 · 1573 阅读 · 0 评论 -
LeetCode452——用最少数量的箭引爆气球
在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了。开始坐标总是小于结束坐标。平面内最多存在104个气球。一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart&...原创 2019-04-23 19:23:54 · 169 阅读 · 0 评论 -
LeetCode124——二叉树中的最大路径和
原题链接:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/description/题目描述:知识点:递归思路:递归实现递归函数的定义:求解包含root根节点的最大路径和。递归终止条件:如果root为null,直接返回0。递归过程:递归求解包含左孩子的以左孩子为根结点的最大路径和maxL,以及包含右孩子的以...原创 2019-04-20 20:00:44 · 126 阅读 · 0 评论