自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(71)
  • 资源 (1)
  • 收藏
  • 关注

原创 Crack LeetCode 之 136. Single Number

https://leetcode.com/problems/single-number/所有数取异或,最终结果就是那个单一的数,这是因为相同的两个数异或的结果为0。算法的时间复杂度为O(n),空间复杂度为O(1)。c++代码如下:class Solution {public: int singleNumber(vector<int>& nums) { if...

2018-11-25 15:05:22 98

原创 Crack LeetCode 之 128. Longest Consecutive Sequence

原题链接:https://leetcode.com/problems/longest-consecutive-sequence/解题思路是,建立一个哈希表,然后loop整个集合,对于每个数字可以通过查询哈希表检查其周边的数字是否连续;如果连续的话则保存最大的连续长度,并且将该数字从哈希表中删除。最大的连续长度就是结果。该算法的时间复杂度为O(n),空间复杂度也是O(n)。c++代码如下:...

2018-11-25 10:18:29 123

原创 Crack LeetCode 之 127. Word Ladder

https://leetcode.com/problems/word-ladder/本文的解釋部分來自於鏈接,出於學習目的我租了部分整理和修改:https://blog.csdn.net/linhuanmars/article/details/23029973本題的本質是图,圖的顶点则是每个字符串。因為每次只能改一個字符,所以該字符串的每个字符可能对应的边有25个(26个小写字母减去自己)...

2018-11-18 16:30:50 116

翻译 系统设计面试题 之 如何设计Pastebin.com

原文链接:https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/pastebin/README.md第一步:搜集用例和约束在面试过程中,我们需要向面试官询问需求以设计用例,但是在本文中我们自己设计用例因为没有面试官。1.用例本文只解决以下用例:1)用户输入一个文本...

2018-11-04 17:49:50 1901

原创 Crack LeetCode 之 133. Clone Graph

Leetcode link: https://leetcode.com/problems/clone-graph/本题要求克隆一个图。这里需要的注意的是,每个节点的相邻节点可能有重复,所以需要一个map检查重复节点。另外,本题还有两个解法:深度优先遍历和广度优先遍历。可以参考https://blog.csdn.net/linhuanmars/article/details/22715747,从...

2018-11-04 11:00:05 117

翻译 系统设计面试题 之 一致性哈希

原文链接 http://www.acodersjourney.com/2017/10/system-design-interview-consistent-hashing一致性哈希是构建可扩展的存储架构的关键技术之一。在一个分布式系统中,一致性哈希可以解决以下两个应用场景的问题:1.为缓存服务器提供弹性扩展(弹性扩展是指我们可以基于负载动态地增减服务器);2.为NoSql之类的应用扩展存...

2018-10-28 17:58:16 1687

原创 Crack LeetCode 之 99. Recover Binary Search Tree

https://leetcode.com/problems/recover-binary-search-tree/BST的两个节点被调换了位置,如何恢复?我们对BST做中序遍历应该得到一个有序序列,但是节点被调换位置的话,中序遍历就会遇到一个节点的前序节点比该节点大的情况,所以我们可以用中序遍历找到位置错误的节点。节点调换位置有两种情况:一是相邻两个节点被调换;二是不相邻的两个节点被调换。...

2018-10-26 18:08:56 134

原创 Crack LeetCode 之 98. Validate Binary Search Tree

https://leetcode.com/problems/validate-binary-search-tree/本题要检查BST是否合法。我们知道对BST做中序遍历会得到一个有序序列,所以我们可以中序遍历BST,对各节点保存前序节点,然后检查各节点是否大于其前序节点即可。以下代码的时间复杂度是O(n),空间复杂度也是O(n)。class Solution {    TreeNode...

2018-10-25 18:09:11 104

原创 Crack LeetCode 之 106. Construct Binary Tree from Inorder and Postorder Traversal

https://leetcode.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/本题解法同https://blog.csdn.net/tassardge/article/details/83378692 故不赘述。C++代码如下,时间复杂度是O(n),空间复杂度是O(n)。class S...

2018-10-25 16:24:51 146

原创 Crack LeetCode 之 105. Construct Binary Tree from Preorder and Inorder Traversal

https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/这道题已知中序遍历和前序遍历的结果求二叉树。我们发现中序遍历结果和前序遍历结果的结构如下。中序遍历结果的结构:[左子树中序遍历结果] + 根节点 + [右子树中序遍历结果]前序遍历结果的结构:根节点 + [左子树前...

2018-10-25 16:04:09 101

原创 Crack LeetCode 之 109. Convert Sorted List to Binary Search Tree

http://oj.leetcode.com/problems/convert-sorted-list-to-binary-search-tree/对一个BST做中序遍历,就得到了一个有序链表;同理,如果按照中序遍历的顺序对有序链表中的节点建立BST,便得到了对应的BST。以下代码用递归的方法以中序遍历的顺序建立BST。C++代码和python代码如下,时间复杂度是O(n),空间复杂度是O...

2018-10-25 14:07:23 129

原创 Crack LeetCode 之 108. Convert Sorted Array to Binary Search Tree

https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/把有序数组转为二叉查找树,本质上就是对数组做二分查找,中间元素就是根;然后在对左右两个分区迭代二分查找。本题可以用递归函数来解。c++代码和python代码如下,空间复杂度是O(logn),时间复杂度是O(n)。class Solution {...

2018-10-22 18:51:10 116

翻译 系统设计面试题 之 数据库分片

原文链接 http://www.acodersjourney.com/2018/08/database-sharding/1. 什么是分片或者数据分区数据分片(也称为数据分区)就是把一个巨大的数据集分为多个小分区的过程,这些小分区位于不同的机器上。每个分区都被称为“分片”。每个分片都有和原来的数据库相同的schema。原来的数据库的大部分数据都分布在各个分片上,原来的数据库的表的每行数据...

2018-10-21 14:52:45 1126

原创 Crack LeetCode 之 123. Best Time to Buy and Sell Stock III

原题链接:https://leetcode.com/problems/best-time-to-buy-and-sell-stock-iii/本文的算法来自这个链接,但是在此基础上做了部分修改:https://blog.csdn.net/linhuanmars/article/details/23236995本文使用的是二维动态规划,是我们之前讨论的“全局最佳+局部最佳”的扩展。首先,我...

2018-10-20 16:17:42 105

翻译 系统设计面试题 之 如何设计一个能扩展到百万用户级别的系统

本文翻译自https://github.com/donnemartin/system-design-primer/blob/master/solutions/system_design/scaling_aws/README.md因为原文有很多重复内容并且组织比较零散,所以译文调整了部分原文顺序,并整理了很多过于琐碎的内容。第一步:用例和约束在面试过程中我们应该向面试官询问和讨论用例和约束。...

2018-10-14 12:14:00 3371 1

原创 Crack LeetCode 之 122. Best Time to Buy and Sell Stock II

https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/description/由于可以交易无限次,所以最大收益等于所有单调递增区间的累加值。换句话说,只要后一天比前一天的价格高,就可以累加这个增量。以下是C++代码和python代码,时间复杂度为O(n),空间复杂度为O(1)。class Solution {p...

2018-10-11 16:42:33 91

原创 Crack LeetCode 之 121. Best Time to Buy and Sell Stock

https://leetcode.com/problems/best-time-to-buy-and-sell-stock/description/这道题跟https://blog.csdn.net/tassardge/article/details/83000873类似,还是用一维动态规划中的“局部最优和全局最优法”。我们迭代处理每天的价格,并且维护三个变量min_price、local和...

2018-10-11 16:09:33 115

原创 Crack LeetCode 之 152. Maximum Product Subarray

https://leetcode.com/problems/maximum-product-subarray/description/下文除了代码部分外,整理自https://blog.csdn.net/linhuanmars/article/details/39537283这道题跟https://blog.csdn.net/tassardge/article/details/830008...

2018-10-11 15:49:56 98

原创 Crack LeetCode 之 53. Maximum Subarray

https://leetcode.com/problems/maximum-subarray/description/下文除了代码以外,部分引用和整理自下文。https://blog.csdn.net/linhuanmars/article/details/21314059这是一道非常经典的动态规划题,本题的思路在别的动态规划题中也很常用,以后我们称之为“局部最优和全局最优解法”。基本...

2018-10-10 17:47:36 125

翻译 系统设计面试题 之 如何设计Instagram

本文翻译自https://www.educative.io/collection/page/5668639101419520/5649050225344512/56733855100436481.什么是InstagramInstagram是一个社交网络服务,用户可以在这个网站上上传和分享他们的照片和视频。Instagram的用户能设置他们的分享内容为所有人可见或者部分人可见。向所有人分享的...

2018-10-06 21:37:24 4296

原创 卡特兰数算法题整理

最近我做了很多卡特兰数相关的算法题,阅读了一些网络上的文章。有的文章过于冗长,太纠结于公式的推导;有的文章又太简单,只是罗列了相关的题目却并无解题分析;而且这些文章或多或少都有一些错误。所以本文目的是简明的分析卡特兰数题目的思路和解法,并且整理的网友的注解。以下是两篇本文主要引用的文章的链接:https://blog.csdn.net/Hackbuteer1/article/details...

2018-10-02 18:00:39 1947

原创 Crack LeetCode 之 96. Unique Binary Search Trees

https://leetcode.com/problems/unique-binary-search-trees/description/因为对于任何一个形态只有一种数字排列方式,所以这道题的本质是求可能的二叉查找树的形态总数。具体解法是任选一个节点做根节点,将左右两边可能的二叉树形态的数目相乘得到一个结果数。按照以上方法遍历所有的节点并累加即可。可以采用动态规划的方法,用一个res数组保...

2018-10-01 14:06:44 146

原创 Crack LeetCode 之 91. Decode Ways

https://leetcode.com/problems/decode-ways/description/本题可以用动态规划解。对于一个字符串s,假设其长度为length,并且有一个长度为(length+1)的int数组statusVec。对于statusVec的任意一个元素statusVec[i],它的含义是前i个数字组成的字符串有多少种解法。当新加进来一个数字的时候,根据该字符与前一...

2018-09-22 17:08:44 137

原创 Crack LeetCode 之 70. Climbing Stairs

https://leetcode.com/problems/climbing-stairs/description/假设对于n阶楼梯,一共有f种走法。然后分两种情况:1.先迈出一步,对于剩下的n-1阶楼梯一共有f1种走法;2.先迈出两步,对于剩下的n-2阶楼梯一共有f2种走法。那么f=f1+f2。显然这是斐波那契数列的公式,所以这道题实际上是求斐波那契数列。以下是实现代码,时间复杂度...

2018-09-16 15:09:40 140

原创 Crack LeetCode 之 50. Pow(x, n)

https://leetcode.com/problems/powx-n/description/本题的思想是二分法,先求n/2次幂,然后两两相乘得到结果;而求n/2次幂,可采用递归迭代的方法。该解法的时间复杂度是O(Log(n)),空间复杂度也是O(Log(n))。以下是实现代码:class Solution {public:    double myPow(double x, i...

2018-09-16 15:07:08 119

原创 SQLServer 之 Hash Join

1. 什么是 Hash Join当sqlserver需要对包含大量记录的表做join的时候,往往会选择hash join,因为hash join性能优异。另外,hash join支持各种外连接和半连接。Hash Join包含两个阶段。第一阶段是build,sqlserver会读取一个表的所有记录生成一个保存在内存中的hash表。这个阶段往往会选择较小的表生成hash表,因为hash表太大的...

2018-09-08 18:51:03 4835

原创 Crack LeetCode 之 31. Next Permutation

Leetcode link: https://leetcode.com/problems/next-permutation/解这道题需要先了解什么是“下一个 排列”的算法,否则单凭题目中给出的几个例子根本无从下手。参考这个链接:https://www.cnblogs.com/ECJTUACM-873284962/p/6390591.html这道题要求不能使用extra memory,所以不...

2018-09-03 11:58:23 135

原创 Crack LeetCode 之 621. Task Scheduler

Leetcode link: https://leetcode.com/problems/task-scheduler/description/基本要点:这道题的本质是求冷却矩形的面积。所谓冷却矩形就是由最长任务的长度乘以冷却时间得到的矩形。把所有任务填充这个矩形,如果能填满或者大于矩形面积,就不会有冷却的问题,那么所需的最少interval就是所有任务总长度;否则最少的interval就是...

2018-09-02 20:43:22 125

原创 与 table variables 相关的 sql 性能问题

1. 问题:如果在Store Procedure使用table variables并且有相关的join操作,那么可能导致性能问题。因为sqlserver可能会为table variable相关的Join操作选择Nested Loop Join,从而在数据集巨大的情况下导致性能下降。下文将做实验分析并且给出解决方法(非常简单)。2. 实验与分析:以上是实验代码,运行之后我们会发现Sqlser...

2018-09-02 16:51:58 340

原创 SQLServer 之 Nested Loop Join

SQLServer的表有各种逻辑连接操作,例如“Left Outer Join”,“Inner Join”等等。但是在物理上,这些逻辑连接都会由三种不同的物理连接(physical join)实现,分别是:“Nested Loops Join”,“Merge Join”和“Hash Join”。下文将详细阐述这三种连接中的“Nested Loop Join”,其他连接类型将在后续文章中阐述。1...

2018-09-01 21:10:58 1250

原创 Crack LeetCode 之 32. Longest Valid Parentheses

Leetcode link: https://leetcode.com/problems/longest-valid-parentheses/description/本题非常适合在面试中使用,因为需要面试者综合考虑各种情况,并且题目短小可以在面试时间内完成。本题有3个要点:1. 这类检查括号的题目一般会用栈做数据结构。左括号入栈,右括号出栈。2. 综合考虑各种情况。例如下面代码所示,遇...

2018-08-25 15:35:23 138

空空如也

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

TA关注的人

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