10 2012 档案
摘要:转自:http://blog.csdn.net/hackbuteer1/article/details/7390093^: 按位异或;&:按位与; | :按位或计算机系统中,数值一律用补码来表示:因为补码可以使符号位和数值位统一处理,同时可以使减法按照加法来处理。对补码做简单介绍:数值编码分为原码,反码,补码,符号位均为0正1负。原码 -> 补码: 数值位取反加1补码 -> 原码: 对该补码的数值位继续 取反加1补码 的绝对值(称为真值):正数的真值就是本身,负数的真值是各位(包括符号位)取反加1(即变成原码并把符号位取反).b -> -b : 各位(包括符号位)取反
阅读全文
摘要:转自:http://blog.csdn.net/beiyeqingteng/article/details/6958320有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。例如: var a=[100,99,98,1,2, 3];var b=[1, 2, 3, 4,5,40];(微软100题第32题)。假设当前数组和的差为A:A = sum[a] - sum[b]交换两个元素a[i],b[i],则差为A' = sum[a] -a[i]+b[i] - (sum[b]-b[i]+a[i]) = su
阅读全文
摘要:《编程之美》2.16节 这是一个DP(动态规划)问题。 以串1, -1, 2, -3, 4, -5, 6, -7为例,递归子结构为:incr[i] = max{1, LIS[k]+1};对k <i, 且array[k] < array[i] LIS表示以array[i]为最大元素的最长递增子序列的长度.prev[N]用于存储该元素的前驱元素。 1 def findInc(array): 2 incr = [1] * len(array) 3 prev = [-1] * len(array) #record the sequence's previous element ..
阅读全文
摘要:在一个字符串中找到第一个只出现一次的字符。如输入adaccbeff,则输出d。 1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 char find(const string & s1) 6 { 7 int hash[26] = {0}; 8 for(int i = 0; i < s1.size(); i++) 9 hash[s1[i]-'a']++;10 11 int i;12 for(i = 0; i < s1.size(); i++) /...
阅读全文
摘要:给字符串s1、s2,在s1中找包含s2里所有字符的最小子串。类似的问题:一串首尾相连的珠子(m个),有N种颜色(N<=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。(July,精选微软等公司数据结构+算法面试100题,40题2)----在对s1中的子串进行判断时,对每个当前字符c,擦除在s2中的含有c的字符,这样最后s2为空时,说明该子串包含s2中的所有字符。----使用myremove的方法,要求s2中没有重复字符,更多的方法以及更详细的介绍 :(July,程序员编程艺术第二章:字符串包含及相关问题扩展) 1 /* 2 * Description: give
阅读全文
摘要:转自:July精选微软等公司数据结构+算法,经典面试100题 43 题1.前序、中序、后序的递归实现就是将printf访问语句放在递归语句的前、中、后三个位置。2.非递归实现要借用栈stack来实现。 因为对于一棵树(子树)t,如果t 非空,访问完t 的根结点值后,就应该进入t 的左子树,但此时必须将t 保存起来,以便访问完其左子树后,进入其右子树的访问。 即在t 处设置一个回溯点,并将该回溯点进栈保存。在整个二叉树前序遍历的过程中,程序始终要做的工作分成俩个部分:1.当前正在处理的树(子树)2.保存在栈中等待处理的部分。//注:当栈中元素位于栈顶即将出栈时,意味着其根结点和左子树已访问完..
阅读全文

浙公网安备 33010602011771号