leetcode
文章平均质量分 66
attitudewcf
这个作者很懒,什么都没留下…
展开
-
leetcode #222 Count Complete Tree Nodes
题目是要计算完全二叉树的节点数。首先看到题目很自然地想用递归的方法去做,但是写完后发现运行超时,递归的时间复杂度为O(n)。 接下来,基于完全二叉树的特点,可以应用一种更快速的方法,每次比较前节点的最左子节点和最右子节点的深度,如果深度相同,那么以该节点为根节点的子树节点数为2^h-1。如果不同就继续以该方式递归的计算左右子树的节点数,并加上当前节点,表达式写作 countNo原创 2015-07-07 20:43:05 · 425 阅读 · 0 评论 -
leetcode#229 Majority Element II
题目要求比较高,空间复杂度和时间复杂度基本都到了极致。思考良久,没有什么头绪,于是搜索了下方法,得知此题可以用摩尔投票方法。具体而言,需要两轮遍历,第一轮获得候选值,第二轮更新候选值出现的次数。最后进行判断是否满足条件。 因为要求出现的次数大于n/3的上界,所以分析可知最多有两个满足条件的值出现,所以设置两个候选值和两个计数器。这里个人主要是一开始对最后一个else不太理解,个人认为原创 2015-07-03 13:11:50 · 345 阅读 · 0 评论 -
leetcode#215 Kth Largest Element in an Array
该题方法较多,但比较好的一种方法是借鉴快排思想,快排中每次交换操作之后,都能确定一个第n大的数,因此只需判断n与k的大小,然后选择查找范围递归进行查找即可。平均时间复杂度 O(n),空间复杂度 O(1)。class Solution {public: int findKthLargest(vector& nums, int k) { int L = 0, R转载 2015-07-04 15:05:25 · 327 阅读 · 0 评论 -
leetcode#224 Basic Calculator
总体来说,题目并不算困难,只是需要注意一些细节的处理以及理清逻辑即可。主要是对栈的应用。 几点注意事项, 首先是空格的处理,因为题目例子中给的字符串出现了空格,所以为了之后运算简便,这里首先对字符串做了去空格的处理。 然后是减法的处理,为了简化,可以把减法看做是加法,不过是加上一个负数。 还有就是括号的处理,遇到左括号将其看做运算符号,进行进栈,然后遇到右括原创 2015-07-03 22:27:48 · 560 阅读 · 0 评论 -
leetcode #220 Contains Duplicate III
通过此题了解了c++ stl中的multiset数据结构,因为使用暴力查找的方法总是超时,所以改用二叉搜索树的方法。而multiset的底层实现是基于红黑树的,满足条件。所以这里借助该数据结构进行查找。具体的是在multiset中维护一个小于等于k的二叉搜索树,当超过k的时候,删除第一个元素。然后每次在树中找大于等于 nums[i]-t 的值。lower_bound方法返回的是>=当前值得第一个迭原创 2015-07-07 11:39:42 · 601 阅读 · 0 评论