随笔分类 -  算法 数据结构

摘要:题目描述:不用 '*' '/' 和 '%' 运算实现两个整数的除法题目来源:http://oj.leetcode.com/problems/divide-two-integers/题目分析:例如 16 / 3,可以按照3的倍数来操作。 3 * 1 = 3, 3 * 2 = 6, 3 * 2 * 2 = 12 ...,而2 * 2等可以用位运算方式表示。那么有16 - 3 = 13, 13 - 3 * 2 = 7, 而7 = b) { for(long long c = b, i = 0; a >= c; ++i, c > 31) ? 阅读全文
posted @ 2014-02-25 10:44 代金桥 阅读(271) 评论(0) 推荐(0)
摘要:题目描述:给定一颗二叉树,使用非递归方法实现二叉树的中序遍历题目来源:http://oj.leetcode.com/problems/binary-tree-inorder-traversal/题目分析:递归到非递归的转换。使用栈描述递归的调用过程,while循环体计算递归程序的计算部分。因为每次while循环只能处理一次递归调用,使用标记记录栈中节点的计算痕迹,例如:用tag记录当前根的调用记录,当根的左右子树均未调用时,令tag值为0,当根的左子树已经调用过时,令tag值为1。时间复杂度:O(n) n为节点数示例代码:vector inorderTraversal(TreeNode *ro 阅读全文
posted @ 2013-10-11 00:45 代金桥 阅读(321) 评论(0) 推荐(0)
摘要:题目描述:给定一个字符串s和一组单词,确定这个字符串是否能够进行这样一种划分,划分后所有的子字符串均来自给定的单词组。例如s = “leetcode” ,dict = {“leet”,“code”},那么s可以由dict中的单词组成。题目来源:http://oj.leetcode.com/problems/word-break/题目分析:可以将原问题的解通过解子问题来解决,用dp[i]表示字符串s从1到i是否能够进行这样的划分,假如s[1...j - 1](j - 1 &dict) { p = 2; memset(node[1].next, 0, sizeof(node[1].n... 阅读全文
posted @ 2013-10-10 00:04 代金桥 阅读(932) 评论(0) 推荐(0)
摘要:题目描述:给定一个包含n个整数的数组,除了一个数出现一次外所有的整数均出现三次,找出这个只出现一次的整数。题目来源:http://oj.leetcode.com/problems/single-number-ii/题目分析:对于除出现一次之外的所有的整数,其二进制表示中每一位1出现的次数是3的整数倍,将所有这些1清零,剩下的就是最终的数。用ones记录到当前计算的变量为止,二进制1出现“1次”(mod 3 之后的 1)的数位。用twos记录到当前计算的变量为止,二进制1出现“2次”(mod 3 之后的 2)的数位。当ones和twos中的某一位同时为1时表示二进制1出现3次,此时需要清零。即用 阅读全文
posted @ 2013-10-05 21:35 代金桥 阅读(11829) 评论(7) 推荐(9)
摘要:题目描述:给定一个包含n个整数的数组S和目标整数target,在S中找4个整数a,b,c,d,使得这a + b + c + d = target。找出所有符合这种情况的四元组。最终结果中的四元组要唯一且四元组内元素非降序。题目来源:http://oj.leetcode.com/problems/4sum/题目分析:先对数组排序,然后构造键为某个和sum,值为所有符合和为sum的元素对的map结构。枚举第一和第二个元素,通过target值得到剩余两个元素的和sum1,使用map中的和为sum1的对象构造第三和四个元素。正确性说明,假设结果集中某个四元组为a,b,c,d,枚举a,b,通过map中键 阅读全文
posted @ 2013-10-01 17:23 代金桥 阅读(346) 评论(0) 推荐(0)
摘要:题目描述:给定一个包含n个整数的数组S和目标整数target,在S中找3个整数,使得这3个整数的和最接近target题目来源:http://oj.leetcode.com/problems/3sum-closest/题目分析:先对数组排序,然后枚举最小的数n1,对于第二和三个数,用两个索引l和r从两端往中间夹击找,找最接近target - n1的两个数,可以通过“求在一个数组中找两个数,使这两个数的和最接近目标整数newTarget”。正确性说明,假设排好序的数组为S1,S2...Si...Sj...Sn,假定最终Si + Sj最接近目标整数newTarget(1)若Si + Sj newT. 阅读全文
posted @ 2013-09-30 13:02 代金桥 阅读(274) 评论(0) 推荐(0)
摘要:题目描述:给定整数n,计算存储序列为1...n的结构唯一的BST的个数题目来源:http://oj.leetcode.com/problems/unique-binary-search-trees/题目分析:对于一个表示序列为1...n的BST,根元素可以是1到n中的任何一个数,当根元素为 i 时,左子树为表示1...i - 1的BST,右子树为表示i + 1...n的BST,所以,原问题可以通过子问题的解得到定义状态f(i,j),状态f(i,j)为表示序列i...j的结构唯一的BST的个数,通过枚举根的值可以得到:f(i,j) = sum(f(i,k - 1) * f(k + 1, j))( 阅读全文
posted @ 2013-09-27 20:18 代金桥 阅读(292) 评论(0) 推荐(0)
摘要:题目描述:由于某种原因一个二叉排序树的两个节点的元素被交换,在不改变树的结构的情况下恢复这颗二叉排序树题目来源:http://oj.leetcode.com/problems/recover-binary-search-tree/题目分析:中序遍历二叉排序树会得到递增序列,如果两个元素交换,递增序列的顺序必被破坏,例如:1, 2, 3, 4, 5, 6, 7。交换后可能会有(1)1, 2, 6, 4, 5, 3, 7 (2)1, 2, 3, 4, 6, 5,7 等在中序遍历时,出现当前元素比中序遍历中前一个元素小时,找到出错元素,维护一个刚刚遍历的节点的指针pre,当遍历结束当前节点时,更新p 阅读全文
posted @ 2013-09-25 20:13 代金桥 阅读(598) 评论(0) 推荐(0)
摘要:题目描述:给定n个非负整数height[n],分别代表直方图条的高,每个条的宽设为1,求直方图中面积最大的矩形的面积题目来源:http://oj.leetcode.com/problems/largest-rectangle-in-histogram/题目分析:维护一个栈,保存直方图条的下标,当当前栈为空或者栈顶的下标所表示的元素不大于当前元素时,入栈,否则出栈,直到可以把当前元素压入栈中(1)对于当前栈,假设序列为a1, a2,...ai, ai+1, a...栈顶,那么处于ai和ai+1之间的元素一定大于ai+1,如果他们中的最小元素小于等于ai+1,那么它一定在栈中,故栈中处于ai和ai 阅读全文
posted @ 2013-09-22 00:03 代金桥 阅读(394) 评论(0) 推荐(0)
摘要:题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数题目来源:http://ac.jobdu.com/problem.php?pid=1384题目分析:假设数组有m行、n列,待查找元素为t由于数组行、列均为递增排序,那么对于一个元素data[i][j]和待查找元素比较有三种情况(1)data[i][j] = t, 那么得到结果,返回(2)data[i][j] t, 那么(i,j)右上方的元素都大于t,可以将这部分排除考虑一个比较特殊的右上角位置(1,n),若data[1][. 阅读全文
posted @ 2013-09-18 17:03 代金桥 阅读(204) 评论(0) 推荐(0)