自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 LeetCode--22. Generate Parentheses

题目链接:https://leetcode.com/problems/generate-parentheses/submissions/要求生成n组合法的括号序列,也就是2n个字符,每个字符取自'('或')',且这个字符序列是合法的Parenthesis(括号)。思路一:最朴素的方法就是把所有的排列情况枚举出来,说到排列的枚举当然小意思,可以参考这一篇https://blog.csdn.n...

2018-12-30 17:02:52 143

原创 LeetCode--35. Search Insert Position

题目链接:https://leetcode.com/problems/search-insert-position/在已排序数组中寻找可以插入的位置,使得插入后的数组仍然为排序数组。这是一道easy的题目,显然是用二分法,但这个二分法写对也不太容易。我的代码是搜索区间是基于左闭右闭区间形式[left,right]写的class Solution { public...

2018-12-30 12:06:17 179

原创 LeetCode--133. Clone Graph

题目链接:https://leetcode.com/problems/clone-graph/题目要求:图的硬copy这个一定是用图的深度优先搜索或者广度优先搜索来遍历整个图,遍历到新的节点就开辟内存,并将该内存的对象引用加入到当前节点的邻接表中去。这里新的节点意味着还没有加入硬拷贝图的节点,而对于已经在图中的节点我们需要把它的引用对象加入到当前节点的邻接表中。为了避免重复生成新的节点,这...

2018-12-29 21:08:22 174

原创 LeetCode--139. Word Break

题目链接:https://leetcode.com/problems/word-break/要求给字符串进行切分(break)是的得到的单词都在字典中。思路一:首先想到的暴力解法:在每个可能的位置将字符串切分为两部分,然后检查这两部分是否都存在于字符串中,如果某部分字符串不存在,则将此字符串继续进行切分,直到存在或者长度为1为止,这是个极其暴力的算法,存在大量重复操作,代码如下:cl...

2018-12-22 19:57:05 138

原创 LeetCode--187. Repeated DNA Sequences

题目链接:https://leetcode.com/problems/repeated-dna-sequences/要求寻找长度为10的DNA重复子字符串思路一:这里可以考虑一个HashMap来存储出现的子字符串及其出现次数,出现第二次的则加入最终答案中,而首次出现的就加入Hashmap中,三次及三次以上出现的不加入只是更新出现次数。思路比较朴素,代码如下:class Solutio...

2018-12-22 13:59:39 221

原创 LeetCode--134. Gas Station

题目链接:https://leetcode.com/problems/gas-station/这个题目题意很绕,但是十分简单,最朴素的思路就是暴力检查一遍,不过有个小技巧——整除余数的性质:就是检查到数组末端的数组后,索引i越界,计算数组长度的余数就能回到起始端,这里还要注意索引0前的一个元素是索引等于length-1的元素。图示如下:                           ...

2018-12-22 13:37:18 134

原创 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 128

原创 LeetCode--46. Permutations

题目链接:https://leetcode.com/problems/permutations/昨天是组合的题目,今天是排列问题,排列的题目就是对于每个元素在某个特定位置上到底选不选的问题。而在前面的位置上选了的某个元素在后面的位置上是不能选的。这时就需要一个全局数组visited来记录选了的与没选的情况。与组合一样,我会用一个ret来存储所有符合条件的排列情况最终返回,而用record数组记...

2018-12-21 18:42:14 149

原创 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 116

原创 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 139

原创 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 207

原创 LeetCode--39. Combination Sum

题目链接:https://leetcode.com/problems/combination-sum/这是一个组合和的问题,备选数组里的数不重复,但是可以选择相同的数。肯定要用到回溯(backtrace)递归的方法。我写递归时喜欢用一个静态list来存最终返回的答案,再开一个较大的静态数组来存临时答案。下面考虑递归函数怎么写,被选数组和目标和肯定是一直要带的参数,需要一个idx变量来标...

2018-12-20 16:27:58 185

原创 LeetCode--148. Sort List

题目链接:https://leetcode.com/problems/sort-list/最先想到的是用数组把节点存下来再用快排,十分简单粗暴:public ListNode sortList(ListNode head) { ListNode node = head; int cnt = 0; while (node != null) { cnt...

2018-12-17 22:09:28 190

原创 LeetCode--21. Merge Two Sorted Lists

题目链接:https://leetcode.com/problems/merge-two-sorted-lists/这个题目要求合并两个有序链表为一个有序链表,比较简单在,这里不赘述。代码如下:class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(l1==nu...

2018-12-17 22:01:44 133

原创 LeetCode--147. Insertion Sort List

题目链接:https://leetcode.com/problems/insertion-sort-list/要求给单链表进行插入排序,我们先回忆一下数组A的插入排序:索引指针i开始于i=0或1,i之前的表示已经排好顺序的数组,A[i]向前逐个比较,遇到比A[i]大的元素则后移一个,直到遇到一个比A[i]小的元素A[j],则将A[i]放在A[j]后面。那么我们来看看链表,单链表是不能向前移动,...

2018-12-17 21:51:36 135

原创 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 124

原创 字符串匹配——Rabin–Karp algorithm(二)

       上一篇https://blog.csdn.net/To_be_to_thought/article/details/84890018只是介绍了朴素的Rabin–Karp algorithm,这一篇主要说说朴素Rabin–Karp algorithm的优化。      模式串P长度为L,文本串S长度为n,在S的一轮遍历中找到P的位置,上文提到的hash(P)的复杂度为O(L),对S...

2018-12-16 17:16:08 405

原创 《Guns,Germs and Steel》Chapter 10:地理分异导致人类社会不同发展模式和速度进程

       Jared Diamond认为:各个大陆的轴向还有地理特征(长度、宽度、特别地形和地貌)导致了不同人类社会在发展路线、发展阶段、交流融合方面产生巨大差异。原题为《spacious skies and tilted axes》。       小时候看过一个未解之谜叫“为什么人类文明的奇迹都发展生在北纬30度上”,读罢此文有一种豁然开朗,拍案叫绝之感。以枪炮、细菌和钢铁为代表的工业文...

2018-12-16 11:22:55 342

原创 位运算技巧总结

在位运算中我们知道左移一位相当于原数变成原来两倍,右移一位相当于原数变成原来的一半。现在来看取一个整型数的二进制表达的某个(些)位:比如要对某个整型数i=1203(00000000 00000000 00000100 10110011)进行每两位取出可以用如下操作:int i=1203;for(int n=0;n<16;n++) System.out.println(...

2018-12-15 17:16:43 198

原创 基数排序(radix sort)

上一篇介绍了计数排序,本文详解另一种线性复杂度的排序——基数排序(radix sort)。基数排序是也是一种非比较整数排序算法。可以用于给字符串集合的“按字典序”排序。问题定义:给定n个d位数据(不足d为的字符串在尾部用""补齐以达到长度为d),每位上是有k个可能取值的一位数值,如果用到的稳定排序在O(n+k)的时间内完成,则基数排序可以在O(d(n+k))时间内完成排序。当每一位的数值在0~...

2018-12-14 20:52:46 1691

原创 计数排序(counting sort)

       基于比较的排序算法的时间复杂度下限是O(nlogn),本文介绍另外一种整数排序算法——计数排序。计数排序是一种非比较排序稳定排序算法,它的运行效率为O(n+m),正比于数值范围大小(n),设待排序元素个数(m),所以它只适用于n相对于m不是特别大的情况,当m>>n时尤其适合。当然对于负整数或小数以及字符排序可以进行适当的预处理将原来待排序元素映射成自然数即可。下面看算...

2018-12-13 15:57:19 259

原创 LeetCode--3. Longest Substring Without Repeating Characters

题目链接:https://leetcode.com/problems/longest-substring-without-repeating-characters/要求最长不重复子字符串而不是子序列思路一:最先想到的就是暴力解法,就是将所以长度大于2的子字符串都检测一遍,在对每个子字符串检测时,需要一个数据结构来存储字符出现的信息,并且当某个子串出现重复时,后续包含该子串的字符串就不需...

2018-12-12 22:20:31 108

原创 LeetCode--14. Longest Common Prefix

题目链接:https://leetcode.com/problems/longest-common-prefix/这是一个easy的题目,但是涉及的思维方式和方法还有一些用的比较少的高级数据结构都是值得讨论研究的,意味深长。LeetCode的前两百道题目各个都是经典,引人思考。这个题目要求一个字符串集合的最长公共前缀。思路一:一拿到题目的思路有两个,其中一个是Trie树,第二个就是这个...

2018-12-12 21:45:18 123

原创 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 147

原创 LeetCode--67. Add Binary

题目链接:https://leetcode.com/problems/add-binary/这个就是要求将两个二进制表示的字符串相加返回一个二进制字符串,最需要注意的是进位的问题。因为是easy的题目,所以思路比较多。思路一:将两个二进制字符串转为对应的十进制整数,然后相加,将计算结果再转为二进制表达的字符串。这个思路比较粗暴,这里不做实现了。思路二:最终结果字符串的长度要么等于a...

2018-12-08 18:16:43 107

原创 LeetCode--49. Group Anagrams

链接:https://leetcode.com/problems/group-anagrams/这个题目思路很清晰,不难发现能够归并在一起的单词之间的联系:具有相同的字母并且字母的数量相同,怎样来把这两个信息都存储起来呢,可以先对字符串进行字母计数,然后将出现次数非0的按照”字母“+”该字母的数量“进行字符拼接,通过HashMap将同类信息-同类的多个字符串的key-value存储起来。直...

2018-12-08 12:40:09 129 1

原创 LeetCode--38. Count and Say

 今早心血来潮想找一条easy题刷一下,就找了个字符串的题目:https://leetcode.com/problems/count-and-say/这个题目虽然是easy题目,但题意理解起来需要一会儿呢。                                     就是说对于每个整数(1,2,...,n)对应的字符串,我们要给字符串进行”连续相同字符“计数count,...

2018-12-08 11:45:13 216

翻译 字符串匹配——Rabin-Karp algorithm(一)

        在https://blog.csdn.net/To_be_to_thought/article/details/84679263这篇使用的是朴素的字符串匹配方法,算法复杂度为O(mn)(m为模式串长度,n为文本串长度)。在字符串匹配任务中,Rabin–Karp算法通过hash函数试图加速文本子串与模式串的匹配过程的“逐一比对过程”。       这里的hash函数可以将每个子串...

2018-12-08 10:44:11 1646 1

原创 Bloom Filter(布隆过滤器)

最早看到这个精巧的数据结构是在《数学之美》上,今天梳理一下它的特点。布隆过滤器:       Bloom Filter是一个节省空间的概率型数据结构,被用来测试一个元素是否存在于集合中。“元素实际不存在于集合中但判定为存在“的这类错误(False positive)在该数据结构上可能发生(概率很低可以人为控制),但是“实际存在于集合中但是判定为不存在”的错误(False Negative)...

2018-12-07 21:34:13 237

原创 Knuth-Morris-Pratt Algorithm(KMP算法)探赜索隐(一)

       KMP是指Donald Knuth、 Vaughan Pratt和James H. Morris三个算法牛人的合并简称,Donald Knuth就是那个写《计算机程序设计艺术》的ACM图灵奖得主。这个算法是在线性时间复杂度下完成字符串匹配任务,这个算法太牛逼了,简洁优美但十分太晦涩,充满技巧性,给大神跪了。问题定义:              字符串匹配问题:在文本串S中寻找...

2018-12-06 17:18:41 697

原创 LeetCode--28. Implement strStr()

        这个是个easy的题目,首先想到直接用String.indexOf()方法直接求,但觉得很耻辱!!!于是有了如下思路:遍历整个文本串(长度为m),比对文本串字母与目标串(长度为n)首字母是否相同,如果相同就检查模式串后面的字母是否相同,但是越简单的题目越容易有小bug,尤其这里面两个循环里的的break处理的有点大意了。这个思路非常普通,时间复杂度O(mn)。KMP算法应该是最优的...

2018-12-01 22:20:08 234

原创 魏璎珞为何受宠?

最近也在追《延禧攻略》,感觉这部剧刷新了我对宫斗剧的认知,女主厉害的太不真实了,但还是觉得她有人们心中那种理想的魅力,一种皇帝、皇后、权贵大臣都向往甚至嫉妒的气质!魏璎珞从刺绣宫女到皇后身边大宫女,最后到令妃、贵妃、皇后,这一步步走来,虽历经艰辛,但也得到了很多人的默默守护或暗中配合。精湛绝伦的刺绣技艺自不必说,凭借机灵调皮、能谋善断,她一次次急中生智、识破奸计、化险为夷,为自己和身边的人洗脱...

2018-12-01 19:06:23 862

原创 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 118

原创 二叉树遍历算法与重构(2)

上一篇(https://blog.csdn.net/To_be_to_thought/article/details/84668630)介绍了二叉树的性质和常用的相关的递归、非递归算法,这一篇想接着写从二叉树的遍历结果重构一棵树,主要是重构的过程思路。1.中序遍历和先根遍历结果重构二叉树算法:                                                ...

2018-12-01 16:46:22 275

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除