LeetCode
文章平均质量分 61
记录LeetCode刷题过程
zxzxin
分享、总结 C++、Java、算法 等技术
展开
-
LeetCode - 39. Combination Sum (组合总和 | dfs)
LeetCode - 39. Combination Sum (组合总和 | dfs)使用used数组和dfs排列数原创 2019-01-22 21:01:20 · 274 阅读 · 0 评论 -
LeetCode - 91. Decode Ways & 639. Decode Ways II(DP)
LeetCode - 91. Decode Ways & 639. Decode Ways II(DP)LeetCode - 91. Decode WaysLeetCode - 639. Decode Ways IILeetCode - 91. Decode Ways题目链接题目解析class Solution { HashMap<String, Int...原创 2019-02-02 21:53:33 · 476 阅读 · 0 评论 -
LeetCode - 4. Median of Two Sorted Arrays(二分)
LeetCode - 4. Median of Two Sorted Arrays(二分)题目链接题目解析假设两个数组的中间位置为k,其中k=(n1 + n2 + 1)/2,只要找到中间位置这个值,也就找到了中位数,所以我们可以把问题转换成查找两个数组中第 k 大的数。如果是总数是偶数,那么如下图,我们的中位数肯定是(Ck-1 + CK) / 2;而Ck-1 = max(Am1 - ...原创 2019-02-01 13:05:21 · 259 阅读 · 0 评论 -
LeetCode - 169. Majority Element (计数 + 位运算 + Partition + 分治)
LeetCode - 169. Majority Element (计数 + 位运算 + Partition + 分治)直接排序HashMap计数利用二进制位运算维护更新方法利用快排的Partition分治方法题目链接题目直接排序方法一: 直接排序,取中间的数,最简单的方法。class Solution{ public int majorityElement...原创 2019-01-30 21:35:06 · 844 阅读 · 1 评论 -
LeetCode - 719. Find K-th Smallest Pair Distance(暴力 | 二分)
LeetCode - 719. Find K-th Smallest Pair Distance(暴力 | 二分)题目链接题目解析import java.io.*;import java.util.*;class Solution { // find K-th Smallest Pair Distance public int smallestDistanceP...原创 2019-01-30 09:26:35 · 300 阅读 · 0 评论 -
LeetCode - 621. Task Scheduler(贪心)
LeetCode - 621. Task Scheduler(贪心)题目链接题目解析// class Solution {// public int leastInterval(char[] tasks, int n) {// HashMap<Character, Integer> counts = new HashMap<>();...原创 2019-01-29 13:50:45 · 745 阅读 · 0 评论 -
LeetCode - 692. Top K Frequent Words & 347. Top K Frequent Elements (堆 | 桶)
LeetCode - 692. Top K Frequent Words & 347. Top K Frequent Elements (堆 | 桶)LeetCode - 692. Top K Frequent WordsLeetCode - 347. Top K Frequent ElementsLeetCode - 692. Top K Frequent Words题目...原创 2019-01-26 22:44:16 · 313 阅读 · 0 评论 -
LeetCode - 149. Max Points on a Line(哈希表 、数学)
LeetCode - 149. Max Points on a Line(哈希表 、数学)题目链接题目解析此题的做法其实就是暴力统计(O(N^2)):每次枚举一个点,看其他点和这个点构成的斜率((y2 - y1) / (x2 - x1))有多少个是相同的,如果有k个相同的斜率,则有k+1个这样的点;但是这一题还需要额外处理可能有相同的点(使用overlap变量统计即可);这题...原创 2019-01-26 10:07:34 · 420 阅读 · 0 评论 -
LeetCode - 37.Sudoku Solver (DFS、回溯)
LeetCode - 37.Sudoku Solver (DFS、回溯)题目链接题目解析这个题目和N皇后问题很像:N皇后问题的数组标记法中用三个数组标记列、主对角线、副对角线是否已经摆法了皇后,这里同样也需要用三个二维数组来标记之前是否已经摆放(求解)了数字。使用三个数组标记之后,然后就是递归去尝试求解了。一开始将不是.的先标记已经放置了(置为true),然后递归求解即可,...原创 2019-01-25 12:55:08 · 310 阅读 · 0 评论 -
LeetCode - 40. Combination Sum II && LeetCode - 216. Combination Sum III (DFS)
LeetCode - 40. Combination Sum II && LeetCode - 216. Combination Sum III (DFS)LeetCode - 40. Combination Sum IILeetCode - 216. Combination Sum IIILeetCode - 40. Combination Sum II题目链接...原创 2019-01-25 09:39:46 · 330 阅读 · 0 评论 -
LeetCode - 56.Merge Intervals & LeetCode - 57.Insert Interval (贪心、插入排序)
LeetCode - 56.Merge Intervals & LeetCode - 57.Insert Interval (贪心、插入排序)LeetCode - 56.Merge IntervalsLeetCode - 57.Insert IntervalLeetCode - 56.Merge Intervals题目链接题目解析这题一看就是贪心的题目:对这些区间...原创 2019-01-24 21:34:16 · 358 阅读 · 0 评论 -
LeetCode - 488. Zuma Game (DFS)
LeetCode - 488. Zuma Game (DFS)题目链接题目解析看题目中的三个例子:DFS过程:先用一个map保存hand字符串中每种颜色的个数;dfs过程,遍历当前board字符串,逐个去寻找一段连续的相同的球,如果这段相同的球在map中还可以提供足够的消去的球,就先消去,这里需要消耗3 - (j - i)个球(具体看代码);然后先去递归消去剩下的(由elim...原创 2019-01-23 22:29:46 · 998 阅读 · 0 评论 -
LeetCode - 128. Longest Consecutive Sequence (哈希表)
LeetCode - 128. Longest Consecutive Sequence (哈希表)题目链接题目解析第一种方法:使用一个HashSet来存储对应的值,一开始先将所有的值都加入set;遍历数组的每一个元素,每次去检查当前元素num的前一个元素num - 1是不是在set中,如果是,说明num不是最长长度的起点,跳过;如果不是,则在set集合中不断的每次+1...原创 2019-01-22 11:33:01 · 296 阅读 · 0 评论 -
LeetCode - 688. Knight Probability in Chessboard (DP)
LeetCode - 688. Knight Probability in Chessboard (DP)题目链接题目解析思路:当前的步数以及当前的位置,可以由上一个可以走到当前位置的位置走到当前位置,如果没有越界,总共有8个这样的上一个位置。看题目中的例子:于是如果是递归求解:则当前递归层依赖的是上一层(k-1)的8种位置的方法数量的和;概率就是到第k层的时候的方法数 ...原创 2019-01-21 21:59:41 · 497 阅读 · 0 评论 -
LeetCode - 687. Longest Univalue Path (树的最长同值路径)
LeetCode - 687. Longest Univalue Path (树的最长同值路径)题目链接题目解析这个题目虽然不难,但是一开始还是没有注意细节:一开始递归函数就是考虑先递归求出左右孩子的最长同值路径;然后如果左孩子和右孩子和自己相同,就更新当前节点返回的最长同值路径;最终答案就是返回以根节点的最长同值路径;但是这种思路对于部分情况是错误的,见下图,因为这里的路径...原创 2019-01-18 11:05:27 · 203 阅读 · 0 评论 -
LeetCode - 678. Valid Parenthesis String (DP | 思维)
LeetCode - 678. Valid Parenthesis String (DP | 思维)DP思维题目链接题目解析这个题目有很多种解法。是一道练思维的好题。DP记忆化的思路:递归函数recur求[L, R]范围内的字符串是否可以构成解,答案是recur(0, n-1);递归终止条件是L == R,如果此时chs[L] == '*',则按照题目要求是返回tru...原创 2019-01-17 13:17:41 · 283 阅读 · 0 评论 -
LeetCode - 684. Redundant Connection (DFS | 并查集)
LeetCode - 684. Redundant Connection (DFS | 并查集)DFS并查集题目链接题目DFS思路:每次添加一条边,然后判断加上这条边之后会不会构成环;判断一个图有没有环用dfs,这里需要维护一个pre变量,表示上次访问的节点,然后使用vis数组标记以及访问的节点,如果再次访问到,就表明有环了;class Solution { ...原创 2019-01-14 20:07:31 · 760 阅读 · 1 评论 -
LeetCode - 127. Word Ladder & 126 (BFS)
LeetCode - 127. Word Ladder & 126 (BFS)LeetCode - 127. Word LadderLeetCode - 126. Word LadderIILeetCode - 127. Word Ladder题目链接题目解析两种解法: 单向BFS和双向BFS(Bidrectional BFS)。单向BFS:首先将wordDic...原创 2019-01-14 16:57:42 · 466 阅读 · 0 评论 -
LeetCode - 664. Strange Printer(DP)
LeetCode - 664. Strange Printer(DP)题目链接题目解析递归思路:当前递归函数求解[i ~ j]范围的最小打印次数;则我们需要在[i, j )中寻找一个k,其中s[k] == s[j],此时[k ~ j]范围内的字符可以一次打印,所以这样可以优化,所以我们要去在所以的k && s[k] == s[j]中取一个最小的,然后去递归[i, k...原创 2019-01-10 23:11:47 · 325 阅读 · 0 评论 -
LeetCode - 221. Maximal Square(求最大的全是1的正方形)
LeetCode - 221. Maximal Square(求最大的全是1的正方形)暴力 (O(N^5))改进动态规划(O(N^3))优化动态规划(O(N^2))题目链接题目暴力 (O(N^5))暴力O(N) * O(M) * O(min(N , M)) * O(N) * O(M),也就是O(N^5),但是也能通过…枚举0 ~ n和0 ~ m,然后枚举这个范围内的所有正...原创 2019-01-09 14:55:30 · 560 阅读 · 0 评论 -
LeetCode - 680. Valid Palindrome II(删除一个字符判断能否构成回文)
LeetCode - 680. Valid Palindrome II(删除一个字符判断能否构成回文)题目链接题目就是给你一个字符串,问你是否能删除最多一个字符(可以不用删除) ,得到一个回文串。解析暴力枚举删除每一个位置的方法肯定是行不通的。这里需要用到回文串的性质。看下面两个例子:案例一: e a d c b c a e另一种情况:e a b f f b e a e...原创 2019-01-07 22:57:41 · 1283 阅读 · 0 评论 -
LeetCode - 381. Insert Delete GetRandom O(1) - Duplicates allowed(允许重复)
LeetCode - 381. Insert Delete GetRandom O(1) - Duplicates allowed(允许重复)题目链接题目解析做这题之前先做LeetCode - 380。这一题加上了可以加入重复的元素,题目就变得复杂了一些。大体思路还是使用HashMap + ArrayList,只不过Map是HashMap<Integer, ArrayList...原创 2019-01-07 22:06:15 · 411 阅读 · 0 评论 -
LeetCode - 380. Insert Delete GetRandom O(1) (常数时间插入、删除和获取随机元素)
LeetCode - 380. Insert Delete GetRandom O(1) (常数时间插入、删除和获取随机元素)HashMap + List 实现两个HashMap实现题目链接题目HashMap + List 实现解析:准备一个HashMap和一个List容器,HashMap存放val到index的映射,List容器中存放val集合;insert(): 将...原创 2019-01-07 20:09:36 · 342 阅读 · 0 评论 -
LeetCode - 673. Number of Longest Increasing Subsequence(最长递增子序列的个数)
LeetCode - 673. Number of Longest Increasing Subsequence(最长递增子序列的个数)题目链接题目解析做这题之前先要知道求一个数组的最长递增子序列。做法:求出最长递增子序列的长度(max),可以用记忆化也可以递推;然后遍历数组,看以哪些数结尾的序列是最长序列,然后对每一个这样的序列进行递归处理,从后往前求以这个结尾的最长序列的个数...原创 2019-01-07 11:30:06 · 271 阅读 · 0 评论 -
LeetCode - 675. Cut Off Trees for Golf Event (排序BFS求最短路)
LeetCode - 675. Cut Off Trees for Golf Event (排序BFS求最短路)题目链接题目解析看下面一个例子:因为题目必须要按照树的高度来砍(访问), 所以我们只需要将所有树按照高度height排序,然后进行对按照顺序bfs访问所有的树即可;结果就是所有bfs结果的和;class Solution { private cla...原创 2019-01-06 20:35:39 · 219 阅读 · 0 评论 -
LeetCode - 451. Sort Characters By Frequency(按照字符出现次数排序(简单题))
LeetCode - 451. Sort Characters By Frequency(按照字符出现次数排序(简单题))题目链接题目解析很简单的题目,直接按照出现次数排序即可,这里只是为了熟练Java8的写法以及代码的优化。上面代码是自己写的(比较冗余),下面的是参考别人的。class Solution { private class Pair implements...原创 2019-01-05 22:41:01 · 195 阅读 · 0 评论 -
LeetCode332 - Reconstruct Itinerary(重新安排行程 图转树 后序遍历)
LeetCode332 - Reconstruct ItineraryLeetCode332 - Reconstruct Itinerary题目链接题目解析解析:由于必须要按照字典序最小的来访问某个节点的孩子,所以在查找节点的孩子的map中使用一个优先队列存放,每次取出来的是字典序最小的;然后按照类似后序遍历的顺序遍历这个图(先访问自己孩子,然后访问自己),然后在反转过来,...原创 2019-01-05 21:10:10 · 449 阅读 · 1 评论 -
LeetCode676. Implement Magic Dictionary & 295. Find Median from Data Stream
LeetCode-676. Implement Magic DictionaryLeetCode-676. Implement Magic Dictionary题目链接题目解析class MagicDictionary { private HashMap<String, HashSet<Character>>magicMap; /** ...原创 2018-12-28 20:20:48 · 164 阅读 · 0 评论 -
LeetCode - 268. Missing Number & 674. Longest Continuous Increasing Subsequence
LeetCode - 268. Missing Number & 674. Longest Continuous Increasing SubsequenceLeetCode - 268. Missing NumberLeetCode - 674. Longest Continuous Increasing SubsequenceLeetCode - 268. Missing...原创 2018-12-27 13:44:29 · 222 阅读 · 0 评论 -
LeetCode - 204 Count Primes & 611 - Valid Triangle Number
LeetCode - 204 Count Primes & 611 - Valid Triangle NumberLeetCode - 204 Count PrimesLeetCode - 611 - Valid Triangle NumberLeetCode - 204 Count Primes题目链接题目大意筛选0~n([0,n))之间的素数个数。解析经典的埃拉...原创 2018-12-26 10:27:41 · 188 阅读 · 0 评论 -
LeetCode - 153. Find Minimum in Rotated Sorted Array (旋转数组中的最小值)
LeetCode-153. Find Minimum in Rotated Sorted Array & LeetCode154(旋转数组中的最小值)LeetCode-153LeetCode-154LeetCode-153题目链接题目解析这个题目在剑指Offer中也出现过,可以分为递归和非递归的解法。递归递归解法中,递归函数先取两边区间的中点mid = (L +...原创 2018-12-03 09:33:15 · 216 阅读 · 0 评论 -
LeetCode - 79. Word Search(DFS)
LeetCode-79. Word Search(搜索)题目链接题目解析这个题目很明显是使用搜索来做,这里使用DFS来做会比较方便:递归函数要记录一个dist变量,表示当前搜索的深度,或者已经找到的字符串的长度,当dist == word.length -1的时候,说明已经找到了这个字符串,就可以返回true;四个方向只需要一个即可,遍历每一个位置,从每个位置开始DFS即可,注意...原创 2018-12-01 13:12:10 · 186 阅读 · 0 评论 -
LeetCode - 654. Maximum Binary Tree(最大二叉树)
LeetCode-654. Maximum Binary Tree(最大二叉树)题目链接题目原创 2018-11-30 15:17:11 · 304 阅读 · 0 评论 -
LeetCode - 669. Trim a Binary Search Tree(删除搜索树中不在[L,R]范围内的节点)
LeetCode-669. Trim a Binary Search Tree(删除搜索树中不在[L,R]范围内的节点)递归非递归题目链接题目递归解法class Solution { public TreeNode trimBST(TreeNode root, int L, int R) { return helper(root, L, R);...原创 2018-11-29 13:31:45 · 211 阅读 · 0 评论 -
LeetCode - 671. Second Minimum Node In a Binary Tree(寻找二叉树中第二小的结点)
LeetCode671-Second Minimum Node In a Binary Tree(寻找二叉树中第二小的结点)非递归BFS递归DFS题目链接题目非递归BFS使用一个变量min来记录比root.val大的数,而且这个数将会是这些比root.val大的数中的最小的数;直接使用BFS遍历即可,但是这个题目有个性质,这可以让我们优化这个题目,即任意一个结点的孩子结点都...原创 2018-11-28 16:46:54 · 238 阅读 · 0 评论 -
LeetCode - 241. Different Ways to Add Parentheses(分治、dp)
LeetCode241-Different Ways to Add Parentheses(分治、dp)class Solution { private HashMap<String,List<Integer>>map; public List&a原创 2018-11-22 09:35:21 · 439 阅读 · 1 评论 -
LeetCode - 139. Word Break & Word BreakII (dp)
LeetCode139-Word Break & LeetCode140-Word BreakII (dp)class Solution { public boolean wordBreak(String s, List<String>原创 2018-10-22 11:19:58 · 312 阅读 · 0 评论 -
LeetCode - 120. Traingle & Hdu - 2084. 数塔问题(简单dp)
LeetCode120-Traingle(类似数塔问题dp)递归dp题目链接class Solution { public int minimumTotal(List<List<Integer>> triangle) { if(triangle == null || triangle.size() == 0 || triangle原创 2018-10-19 09:01:45 · 880 阅读 · 0 评论 -
LeetCode - 141. Linked List Cycle & 160. Intersection Of Two Linked Lists(链表成环问题)
LeetCode141 Linked List Cycle & 142 Linked List Cycle II &160 Intersection Of Two Linked ListsLeetCode141 Linked List Cycle(判断是否有环)LeetCode142 Linked List Cycle II(找到第一个入环节点)LeetCode160 ...原创 2018-10-15 17:12:30 · 254 阅读 · 0 评论 -
LeetCode - 312. Burst Balloons(DP)
LeetCode312-Burst Balloons(dp)递归写法二维dp题目链接题目递归这题递归本来用ArrayList写了一个,也是枚举删除的位置,递归后插入还原,但是那样不好记忆化,于是看了讨论区。。。答案有点分治的意思。。思路: (注意这里process函数(递归函数)求的是在[L,R]闭区间可以取的最大值)如果L > R,则区间无数,这是递归边界,返回0...原创 2018-10-14 21:13:58 · 312 阅读 · 0 评论