摘要: 题目描述:不用 '*' '/' 和 '%' 运算实现两个整数的除法题目来源: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 代金桥 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 题目描述:给定一个天平,用最少的砝码称出1到100克的物品,砝码重量任选分析:假设物品放在右边,砝码可以放在左边或者右边,那么有:放在左边砝码的重量 = 放在右边砝码的重量 + 物品的重量,即 放在左边砝码的重量- 放在右边砝码的重量= 物品的重量。假设砝码放在左边用‘+’表示,放在右边用‘-’表示。那么容易知道∑±ai(ai取‘+’、‘-’或不取,三种情况)表示所有可能的情况。下面给出一种方案:1、3、9、27、81。容易知道4个砝码∑±ai最多有34 = 81中可能的值,所以4个砝码不可能称出1到100所有的值。下面说明1、3、9、27、81的正确性。对于30、31、3 阅读全文
posted @ 2013-11-06 00:27 代金桥 阅读(2290) 评论(0) 推荐(1) 编辑
摘要: 题目描述:给定一颗二叉树,使用非递归方法实现二叉树的中序遍历题目来源: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 代金桥 阅读(311) 评论(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 代金桥 阅读(921) 评论(0) 推荐(0) 编辑
摘要: 题目一:题目描述:函数int bis(int x,int m)(位设置)生成一个结果z,z是由m的位来修改x的位得到的,在m的二进制表示为1的每个位置上,将z对应的位设置为1。函数int bic(int x,int m)(位清除)生成一个结果z,z是由m的位来修改x的位得到的,在m的二进制表示为1的每个位置上,将z对应的位设置为0。仅使用bis和bic来计算异或运算int xor (int x,int y) { int result = ____ ; return result;}题目分析:容易知道,bis运算等价于OR,bic运算等价于x & ~ m。对于^,有属性x ^ y =.. 阅读全文
posted @ 2013-10-09 11:57 代金桥 阅读(500) 评论(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 代金桥 阅读(11766) 评论(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 代金桥 阅读(337) 评论(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 代金桥 阅读(263) 评论(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 代金桥 阅读(282) 评论(0) 推荐(0) 编辑
摘要: 使用远程线程来注入DLLDLL注入技术要求我们目标进程中的一个线程调用LoadLibrary来载入我们想要的DLL(1)用OpenProcess函数打开目标进程(2)用VirtualAllocEx函数在远程进程的地址空间中分派一块内存(3)用WriteProcessMemory函数把DLL的路径名复制到第一步分配的内存中(4)用GetProcAddress函数来得到LoadLibraryW函数(在Kernel32.dll中)的实际地址(5)用CreateRemoteThread函数在远程进程中创建一个线程,让新线程调用LoadLibraryW函数并在参数中传入第1步分配的内存地址。这时,DLL 阅读全文
posted @ 2013-09-27 16:14 代金桥 阅读(816) 评论(0) 推荐(0) 编辑