![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode与剑指Offer
To_be_thinking
不积跬步,无以至千里。因为热爱而充满激情与斗志!!!
展开
-
LeetCode Week Contest
本周题目比较简单暴力。1252. Cells with Odd Values in a Matrix暴力模拟class Solution { public int oddCells(int n, int m, int[][] indices) { int ans=0; int[][] chess=new int[n][m]...原创 2019-11-10 20:55:07 · 216 阅读 · 0 评论 -
数独问题暴力搜索
数独问题在leetcode中有36. Valid Sudoku和37. Sudoku Solver两道,数独规则有三条: 1.每一行数字在1-9不能重复。 2.每一列数字在1-9不能重复。 3.在所属特定的3*3邻域内的数字1-9不能重复。 37. Sudoku S...原创 2018-05-17 13:06:45 · 754 阅读 · 0 评论 -
Leetcode-129. Sum Root to Leaf Numbers
这是一道深度优先搜索(递归)的二叉树题目,题意简洁易懂。递归函数写之前尤其是构思的时候感觉比较乱,但是在真正写的时候,只要你的思维停在当前状态然后一步步向下,稀里糊涂就写出来了,并且十分简洁。好吧,直接上思路,见注释。 public static int sumNumbers(TreeNode root) { //递归终止条件不是空节点,也就是空节点不能进入递归函数,leetcode经常...原创 2018-05-08 14:01:23 · 164 阅读 · 0 评论 -
LeetCode--609. Find Duplicate File in System(附思考)
寻找重复文件(文件夹和文件名不同文件内容相同)https://leetcode.com/problems/find-duplicate-file-in-system/description/思路比较简单,以文件内容为key建立map,将相同内容的文件地址放在一起public static List<List<String>> findDuplicate(Str...原创 2018-06-04 20:05:09 · 334 阅读 · 0 评论 -
Leetcode-547. Friend Circles
https://leetcode.com/problems/friend-circles/description/用图的邻接矩阵来表达社交关系,具有朋友关系归为同一个朋友圈(传递性),最后求朋友圈的数目,可用并查集的思路设计算法,算法设计原理可以看这一篇https://blog.csdn.net/to_be_to_thought/article/details/80726788。publ...原创 2018-06-18 21:33:21 · 275 阅读 · 0 评论 -
LeetCode--338. Counting Bits
对于整型数i,计算0-i范围的每个数的二进制表达中含有1的数目,很显然假设k的二进制表达中含有1的数目为f(k),k+1的二进制表达中含有1的数目为f(k+1)必然与前面算过的f(i)相关,显然是用动规解决。经过分析发现:public static int[] countBits(int num) { int max=(int) (Math.log10(Integer.MA...原创 2018-07-11 12:19:27 · 177 阅读 · 0 评论 -
Leetcode-75. Sort Colors(三向切分)
https://leetcode.com/problems/sort-colors/题意:一次遍历数组完成排序将0,1,2安排妥当这道题是可以用三向切分排序的思想解决,算法思路参考https://mp.csdn.net/postedit/83472800。设置两个数组下标start和end和一个遍历指针i:[0,start)存储0,[1,i)存储1,[i,end]中的数等待遍历,(en...原创 2018-11-09 15:37:29 · 120 阅读 · 0 评论 -
LeetCode-92. Reverse Linked List II(附思考过程和debug过程)
https://leetcode.com/problems/reverse-linked-list-ii/题意比较简单,要求在一轮遍历中将第m个节点到第n个节点逆转,其他节点保持不变,核心代码与https://leetcode.com/problems/reverse-linked-list/有所不同。关键是从逆转操作中抽象出“循环不变式”。请看如下详解:如下图是一个要逆转第3(m)到第5(n...原创 2018-11-10 17:24:16 · 360 阅读 · 0 评论 -
LeetCode-142. Linked List Cycle II(详细证明)与龟兔赛跑算法
这道题目是141. Linked List Cycle的加成版https://leetcode.com/problems/linked-list-cycle/,思路都是“龟兔赛跑追及问题必相遇”,但这条需要确定环的入口节点。我们需要定量化一下: pSlow是慢指针,pFast为2倍速指针当pSlow经过i(i=4)“单位步长”首次到达Entry节点时,p...原创 2018-11-11 15:20:41 · 1743 阅读 · 1 评论 -
LeetCode-23. Merge k Sorted Lists题目的思考总结
这条Hard的题目https://leetcode.com/problems/merge-k-sorted-lists/可以借鉴easy的这个题https://leetcode.com/problems/merge-two-sorted-lists/的思维方式(代码),参考这一篇:https://blog.csdn.net/To_be_to_thought/article/details/8505...原创 2018-11-12 17:00:19 · 153 阅读 · 0 评论 -
LeetCode-53. Maximum Subarray
题目链接:https://leetcode.com/problems/maximum-subarray/本题虽然是easy题目,但算法还是非常精巧的,详细的可以参考上一篇https://blog.csdn.net/To_be_to_thought/article/details/84328144,从暴力搜索层层优化到分治递归和动态规划。动态规划解法使用的是Kadane’s algorith...原创 2018-11-21 19:32:34 · 123 阅读 · 0 评论 -
LeetCode-17. Letter Combinations of a Phone Number
题目链接https://leetcode.com/problems/letter-combinations-of-a-phone-number/题目还是蛮有趣的,思路比较直接:使用特定的数据结构将数字2-9到字母的映射保存下来,然后进行组合(combination)就行,组合可以用递归的方法。因为是组合,每个”数字字符”都含有多个“字母字符”,每次从每个”数字字符”中选择任意一个“字母字符...原创 2018-11-19 13:48:05 · 163 阅读 · 0 评论 -
LeetCode-442. Find All Duplicates in an Array & 287. Find the Duplicate Number
题目1链接:https://leetcode.com/problems/find-all-duplicates-in-an-array/题目2链接:https://leetcode.com/problems/find-the-duplicate-number/这道题目在剑指offer面试题3 P39先看题目一:数组大小为n,数组元素A[i]在[1,n]中,里面有重复数字,找出所有...原创 2018-11-23 22:56:41 · 90 阅读 · 0 评论 -
LeetCode-54. Spiral Matrix
题目链接:https://leetcode.com/problems/spiral-matrix/本题是矩阵的螺旋遍历,如图: 将四周(蓝色)遍历完成后剩余部分依旧是一个矩形,因此剩余任务跟整个任务的完成方法一致,子矩阵的范围可以由左上角方块坐标和右下角方块坐标唯一确定,可以使用递归!!!...原创 2018-11-19 20:43:41 · 147 阅读 · 0 评论 -
LeetCode--55. Jump Game
题目链接:https://leetcode.com/problems/jump-game/这是个十分有趣的题目。从起点(数组索引0)出发,移动k(k<=nums[0])个位置到达下一个位置(数组索引为i),继续移动k(k<=nums[i])个位置,就这样看是否有一条走法能到达终点(数组索引nums.length-1)。当走到某个位置i时nums[i]==0时就意味着这个走法行不通了...原创 2018-11-24 11:43:35 · 155 阅读 · 0 评论 -
LeetCode--200. Number of Islands
题目链接:https://leetcode.com/problems/number-of-islands/要求计算0-1矩阵中的孤岛1数目。举个例子,在某个位置(i,j)board[i][j]=1,则与它(邻接)连通的“1”都被算作同一片岛屿,这里可以使用深度优先搜索将与之连通的‘1’位置全部访问一遍,直到岛屿周围都是‘0’;当然要计算岛屿的个数就要检查所有格点(二重循环),另外属于某个岛屿的...原创 2018-11-25 17:16:35 · 203 阅读 · 0 评论 -
LeetCode--24. Swap Nodes in Pairs
题目链接:https://leetcode.com/problems/swap-nodes-in-pairs/思路类似于逆转单链表(https://blog.csdn.net/To_be_to_thought/article/details/83930978)找出循环不变式,链表题目画画图就出来了。思路具体如图: 循环不变式提炼...原创 2018-11-25 11:50:17 · 246 阅读 · 0 评论 -
LeetCode--108. Convert Sorted Array to Binary Search Tree详解
题目链接:https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/题目要求将排序数组转为平衡二叉搜索树,先说一下二叉搜索树(Binary search tree)的定义和特性(wikipedia):对应本题核心特点是:左子节点值小于等于父节点的值,右子节点大于父节点里的值。再来看“平衡”,题目中也...原创 2018-11-29 14:56:18 · 288 阅读 · 3 评论 -
LeetCode--101. Symmetric Tree
题目链接:(https://leetcode.com/problems/symmetric-tree/)检查树是否是对称树。这个题目感觉是medium难度的!!!首先想到的是递归思路:因为很容易发现“子节点是否是对称树的解决方案”跟“父节点是否是对称树”的解决方案是一样的。 下图同种颜色相互对称的节点...原创 2018-11-26 19:49:11 · 132 阅读 · 0 评论 -
LeetCode--104. Maximum Depth of Binary Tree
题目链接:https://leetcode.com/problems/maximum-depth-of-binary-tree/求树的最大深度,一言以蔽之:子节点树的最大深度加1就是父节点树的最大深度。递归题目想通了就好简单!!!class Solution { public int maxDepth(TreeNode root) { int m=0; ...原创 2018-11-26 19:56:28 · 129 阅读 · 0 评论 -
LeetCode--111. Minimum Depth of Binary Tree
题目链接:https://leetcode.com/problems/minimum-depth-of-binary-tree/求树的最小深度,也就是说:沿着树的路径从根节点到最近叶节点的距离。需要一个队列进行层次遍历(BFS,对层次进行计数),在某一层找到叶节点时返回。class Solution { public static int minDepth(TreeNode ...原创 2018-11-26 21:18:06 · 118 阅读 · 0 评论 -
LeetCode--31. Next Permutation
题目链接:https://leetcode.com/problems/next-permutation/今天中午笔友突然让我看这个题,心血来潮就思考了一下有了思路就开始码了!!!so interesting a problem!!! the lexicographically next greater permutation of numbers这句话需要wikipedia一下,在go...原创 2018-11-27 14:16:02 · 156 阅读 · 0 评论 -
LeetCode--105/106. Construct Binary Tree from Inorder/Preorder and Postorder Traversal
这两个题目思路如出一辙,算法原来也写过详细的博客,参考这两个1.https://blog.csdn.net/To_be_to_thought/article/details/846686302.https://blog.csdn.net/To_be_to_thought/article/details/84674266代码集中贴一下:class Solution { publ...原创 2018-12-01 17:01:06 · 115 阅读 · 0 评论 -
LeetCode--28. Implement strStr()
这个是个easy的题目,首先想到直接用String.indexOf()方法直接求,但觉得很耻辱!!!于是有了如下思路:遍历整个文本串(长度为m),比对文本串字母与目标串(长度为n)首字母是否相同,如果相同就检查模式串后面的字母是否相同,但是越简单的题目越容易有小bug,尤其这里面两个循环里的的break处理的有点大意了。这个思路非常普通,时间复杂度O(mn)。KMP算法应该是最优的...原创 2018-12-01 22:20:08 · 230 阅读 · 0 评论 -
LeetCode--38. Count and Say
今早心血来潮想找一条easy题刷一下,就找了个字符串的题目:https://leetcode.com/problems/count-and-say/这个题目虽然是easy题目,但题意理解起来需要一会儿呢。 就是说对于每个整数(1,2,...,n)对应的字符串,我们要给字符串进行”连续相同字符“计数count,...原创 2018-12-08 11:45:13 · 199 阅读 · 0 评论 -
LeetCode--49. Group Anagrams
链接:https://leetcode.com/problems/group-anagrams/这个题目思路很清晰,不难发现能够归并在一起的单词之间的联系:具有相同的字母并且字母的数量相同,怎样来把这两个信息都存储起来呢,可以先对字符串进行字母计数,然后将出现次数非0的按照”字母“+”该字母的数量“进行字符拼接,通过HashMap将同类信息-同类的多个字符串的key-value存储起来。直...原创 2018-12-08 12:40:09 · 126 阅读 · 1 评论 -
LeetCode--67. Add Binary
题目链接:https://leetcode.com/problems/add-binary/这个就是要求将两个二进制表示的字符串相加返回一个二进制字符串,最需要注意的是进位的问题。因为是easy的题目,所以思路比较多。思路一:将两个二进制字符串转为对应的十进制整数,然后相加,将计算结果再转为二进制表达的字符串。这个思路比较粗暴,这里不做实现了。思路二:最终结果字符串的长度要么等于a...原创 2018-12-08 18:16:43 · 105 阅读 · 0 评论 -
LeetCode--13. Roman to Integer & 12. Integer to Roman
题目链接:https://leetcode.com/problems/roman-to-integer/和https://leetcode.com/problems/integer-to-roman/这两道姊妹题是十分经典有趣的字符串题目。第一题:要求我们将罗马数字转为整数,这个下面的规则说的很清晰,我最先想到的是暴力枚举所有规则:class Solution { pub...原创 2018-12-09 12:52:02 · 144 阅读 · 0 评论 -
LeetCode--3. Longest Substring Without Repeating Characters
题目链接:https://leetcode.com/problems/longest-substring-without-repeating-characters/要求最长不重复子字符串而不是子序列思路一:最先想到的就是暴力解法,就是将所以长度大于2的子字符串都检测一遍,在对每个子字符串检测时,需要一个数据结构来存储字符出现的信息,并且当某个子串出现重复时,后续包含该子串的字符串就不需...原创 2018-12-12 22:20:31 · 106 阅读 · 0 评论 -
LeetCode--39. Combination Sum
题目链接:https://leetcode.com/problems/combination-sum/这是一个组合和的问题,备选数组里的数不重复,但是可以选择相同的数。肯定要用到回溯(backtrace)递归的方法。我写递归时喜欢用一个静态list来存最终返回的答案,再开一个较大的静态数组来存临时答案。下面考虑递归函数怎么写,被选数组和目标和肯定是一直要带的参数,需要一个idx变量来标...原创 2018-12-20 16:27:58 · 172 阅读 · 0 评论 -
LeetCode--40. Combination Sum II
题目链接:https://leetcode.com/problems/combination-sum-ii/这个题目是在39. Combination Sum加了点变化,就是说被选数组里的数可以重复的,但是同一个数组位置上的数不能重复选,不并且不同数组位置上选择的相同的数导致的相同的组合结果应该被剔除,比如最终结果[1,2,1]和[1,1,2]应该只保留一个。这个题目我首先那想到的是在39...原创 2018-12-20 16:39:19 · 196 阅读 · 0 评论 -
LeetCode--19. Remove Nth Node From End of List
题目链接:https://leetcode.com/problems/remove-nth-node-from-end-of-list/这个题目竟然是medium,怕是个easy吧。要求删除链表中倒数第n个节点。首先想到的就是直接找的待删除节点的前驱结点在执行删除操作就行,这里要注意的是待删除节点可能是头结点的特殊情况,所以用一个虚拟节点来规避,代码如下:class Solution...原创 2018-12-21 13:58:34 · 125 阅读 · 0 评论 -
LeetCode--48. Rotate Image
题目链接:https://leetcode.com/problems/rotate-image/这个medium的题目只要找到里面的坐标变换方式就很easy了,先做转置操作,再做列对称操作就OK了代码比较简单: class Solution { public void rotate(int[][] matrix) { int n_row=matrix.len...原创 2018-12-21 14:19:45 · 106 阅读 · 0 评论 -
LeetCode--46. Permutations
题目链接:https://leetcode.com/problems/permutations/昨天是组合的题目,今天是排列问题,排列的题目就是对于每个元素在某个特定位置上到底选不选的问题。而在前面的位置上选了的某个元素在后面的位置上是不能选的。这时就需要一个全局数组visited来记录选了的与没选的情况。与组合一样,我会用一个ret来存储所有符合条件的排列情况最终返回,而用record数组记...原创 2018-12-21 18:42:14 · 146 阅读 · 0 评论 -
LeetCode--47. Permutations II
题目链接:https://leetcode.com/problems/permutations-ii/这个题目就是跟https://blog.csdn.net/To_be_to_thought/article/details/85126156这篇思路类似,就是在46. Permutations的基础上用HashSet进行去重操作。代码的逻辑结构基本一致:class Solution {...原创 2018-12-21 18:47:44 · 123 阅读 · 0 评论 -
LeetCode--165. Compare Version Numbers
题目链接:https://leetcode.com/problems/compare-version-numbers/一大早看到如此简单的题似乎膨胀了,这个不就是字符串排序(比较)的子问题嘛,比较一下就完了,于是咔咔咔写出了下面的无脑代码:class Solution { public int compareVersion(String version1, String vers...原创 2018-12-17 11:50:05 · 115 阅读 · 0 评论 -
LeetCode--134. Gas Station
题目链接:https://leetcode.com/problems/gas-station/这个题目题意很绕,但是十分简单,最朴素的思路就是暴力检查一遍,不过有个小技巧——整除余数的性质:就是检查到数组末端的数组后,索引i越界,计算数组长度的余数就能回到起始端,这里还要注意索引0前的一个元素是索引等于length-1的元素。图示如下: ...原创 2018-12-22 13:37:18 · 131 阅读 · 0 评论 -
LeetCode--187. Repeated DNA Sequences
题目链接:https://leetcode.com/problems/repeated-dna-sequences/要求寻找长度为10的DNA重复子字符串思路一:这里可以考虑一个HashMap来存储出现的子字符串及其出现次数,出现第二次的则加入最终答案中,而首次出现的就加入Hashmap中,三次及三次以上出现的不加入只是更新出现次数。思路比较朴素,代码如下:class Solutio...原创 2018-12-22 13:59:39 · 215 阅读 · 0 评论 -
LeetCode--139. Word Break
题目链接:https://leetcode.com/problems/word-break/要求给字符串进行切分(break)是的得到的单词都在字典中。思路一:首先想到的暴力解法:在每个可能的位置将字符串切分为两部分,然后检查这两部分是否都存在于字符串中,如果某部分字符串不存在,则将此字符串继续进行切分,直到存在或者长度为1为止,这是个极其暴力的算法,存在大量重复操作,代码如下:cl...原创 2018-12-22 19:57:05 · 136 阅读 · 0 评论 -
LeetCode--14. Longest Common Prefix
题目链接:https://leetcode.com/problems/longest-common-prefix/这是一个easy的题目,但是涉及的思维方式和方法还有一些用的比较少的高级数据结构都是值得讨论研究的,意味深长。LeetCode的前两百道题目各个都是经典,引人思考。这个题目要求一个字符串集合的最长公共前缀。思路一:一拿到题目的思路有两个,其中一个是Trie树,第二个就是这个...原创 2018-12-12 21:45:18 · 117 阅读 · 0 评论