关闭

C++ const

目的: 值代替。  预处理宏定义的缺点: 只做文本替换,并没有类型检查,这样会产生风险。        内存存储形式,常量折叠 常量的定义会保存在符号表中,可折叠的常量像宏一样,在预编译阶段对常量的引用一律被替换为常量所对应的值。但在运行时常量也是会被分配内存空间的。 下面的程序可以说明。  int main() { const in...
阅读(695) 评论(0)

编程之美 - 分层遍历二叉树

问题描述 一棵二叉树,按从上到下,从左到右的方式进行遍历,打印它的所有的节点。 例如二叉树 输出的结果为 a bc def   思路: 二叉树遍历的方式为分层方式 每一层都可以看做是一个链表,根节点level 0可以看做只有一个元素的链表。当遍历level 0时,可以同时将根节点的左右子树放入level 1的链表中。当遍历level1的链表时可以同理生成...
阅读(614) 评论(0)

编程之美 - 重建二叉树

问题描述: 给出二叉树先序遍历和中序遍历的结果,根据结果重建二叉树。 举例: 例如二叉树 先序遍历结果 为 abdcef  中序遍历结果为 dbaecf,现根据结果重构二叉树。 思路: 关键需要找到二叉树每一层的根节点和子树的长度。 例如先序遍历中根节点必然是第一个 abdcef ,  通过中序遍历可以发现 dbaecf a的左侧有两个,右侧有3个,...
阅读(622) 评论(0)

编程之美 - 求二叉树节点的最大距离

问题描述: 把在二叉树中,从一个节点到另一个节点的需要经过的边数,定义为距离。 求一棵二叉树中,距离最远的两个节点之间的距离是多少? 问题分析: 最远的节点可能出现两种情况: 1)  位于根节点下面两棵不同的子树上,例如节点C和D 2)  位于根节点下面同一棵子树上,例如节点 F 和 I,他们位于B子树上。 这样问题可以转化为求二叉树子树上的最远节点,根节...
阅读(831) 评论(0)

编程之美 - 无头链表删除节点

问题描述: 一个没有头指针的链表,从其中删除任意一个中间节点(非第一个,也不是最后一个)。 思路: 没有头指针,所以无法使用遍历的方式找到目标节点的上一个节点。但可以使用的是目标节点的下一个节点。 因为当前节点是要被删除的,所以当前节点的值已经不需要被保存了,可以直接用下一个节点的值将其替换。 然后,直接删除下一个节点即可。 代码: void delete_node(...
阅读(639) 评论(0)

编程之美 - 计算字符串相似度

问题描述: 有两个不同的字符串,通过使用一套操作方法可以把两个字符串变成一样的。 例如: 1)  "a" 和 "b"  ==>  把a变成b,或把b变成a  变化了一次 2)  "abc" 和 "ade"  ==>  把bc变成de,或把de变成bc  变化了两次 3)  "abcd" 和 "abcde"  ==>  删除e  变化了一次 每操作一次,两个字符串的距离就...
阅读(729) 评论(0)

编程之美 - 电话号码对应英语单词

问题描述: 电话的号码盘上一个数字对应着几个字母,一串数字对应着几种字母的组合。 现在给定一组数字,列出对应的字母的组合。 思路: 例如:4对应键盘上 GHI, 2对应键盘上 ABC 数字 42 的组合对应的字符串,用树的表现形式:                                       42 4:                 ...
阅读(800) 评论(0)

编程之美 - 字符串移位包含

问题描述: 两个字符串s1, s2,将s1循环位移,判断s2是否被包含在其中。 例如:s1 = "ABCD"  s2= "CDA"  将s1循环位移后得到BCDA,s2被包含在s1循环位移后的字符串中。 思路 1: 将s1移位一次,然后与s2比较一次。如果字符串比较长,效率很低。 思路 2: 假设保留s1移位的结果, 例如:s1 = "ABCD"   位移一次 ...
阅读(704) 评论(0)

编程之美 - 只考加法的算术题

问题描述: 给定一个正整数 N,将N分解为几个(2个以上)连续的自然数的和。是否所有的数都可以做到。 例如 10 = 1 + 2 + 3 + 4。 思路: 以最简单的方式开始思考: 1) N为奇数,奇数可以分解为两个连续的自然数的和。例如 9 = 4+5。 2) 当N为偶数,如果N可以被 3 整除, 假设a = N/3,那么N还可以被分解为 a-1,a,a+1三个数 3)...
阅读(689) 评论(0)

编程之美 - 区间重合判断

问题描述: 给定一个源区间 (x, y)和若干个无序的目标区间 (x0, y0), (x1, y1), (x2, y2), ...... (xn, yn), 判断源区间是否在目标区间内。 思路 1:分解源区间 把目标区间逐一的映射在源区间上,可以将源区间分解为更小的区间。最后看是否能将源区间全部分解。 例如:源区间 {1,6},  目标区间 {{2,3}, {3,9}, {1,2}...
阅读(1008) 评论(0)

编程之美 - 数组分割

问题: 有一个没有排序,有2N个元素的数组,要求把这个数组分为两部分,分别含有N个元素,并使两个子数组的和最接近。 这里的程序主要是计算这个和的值。 比如数组 {1, 10, 100, 1000},计算后符合的分法是 {1, 1000} {10, 100} 和算出比较小的就可以了是  110 例如数组 {1, 2, 3, 4}  分开后是 {1, 4} 和 {2, 3} ...
阅读(750) 评论(0)

SIP Call Flow - Initiation of IMS Session

这里在 IMS 网络中,手机 abc会与另一部手机xyz建立起会话。 基本步骤: 手机abc构造了一个INVITE消息,其中包含另一部手机xyz的 public user identity。所有的SIP消息需要通过P-CSCF和S-CSCF的转发手机和P-CSCF间的SIP消息都是通过IPSec完整性保护的手机和P-CSCF间的SIP都是经过压缩的手机间交互/协商媒体流的属性U...
阅读(1000) 评论(0)

SIP Call Flow - Registration

Session Initiation Protocol (SIP) registration 注册的过程是将 IP 地址和当前用户的公共用户ID(Public user ID:SIP URI  (uniform resource identifier)) 绑定的过程。 SIP (Session Initiation Protocol) 绑定的过程 UE 发送 Regis...
阅读(1068) 评论(0)

编程之美 - 数组循环移位

问题描述: 将一个数组向右循环移位 k 位,要求只使用两个参数,时间复杂度为 O(N)。 思路 1: 采用蛙跳的方式,用当前的元素 i,替换第i+k个元素,这样逐一替换N次后,数组被移位完成。 当然这时要区分能两种情况,N能整除k 和 N不能整除k,这时跳的方式是不一样的。 时间复杂度 O(N) 假设 N = 7 k = 3 (N不能整除k),  假设 N = 9 k ...
阅读(719) 评论(0)

编程之美 - 数组最长子序列

问题描述: 求一个一维数组的最长递增子序列,时间复杂度尽可能小。 例如:数组 1, -1,2,-3,4,-5,6,-7它的最长递增子序列是 1,2,4,6。 思路: 创建一个数组,用于记录到它为止递增元素的最大个数。 从目标数组的第一个元素开始,寻找从数组0元素开始到当前元素中间的递增的元素个数,并记录。 时间复杂度 O(N*N)。 #include ...
阅读(1085) 评论(0)

编程之美 - 二维数组最大和的子序列

问题描述: 找出二维数组中的最大和的子序列。二维数组中的子序列是二维数组中的一个方块。 思路一: 使用暴力的方式,从每一个元素开始,变量以它为左上定点的所有的可构造的方块。 时间复杂度 N*N*M*M* sum(MN) 函数:getMaxSum1() 思路二: 参考一维数组的方式,将二维数组的转化为一个一维数组后,再进行求和。 例如:在二维数组中选择了 a ...
阅读(911) 评论(0)

编程之美 - 数组最大和的子序列

问题描述: 一个数组有N个元素,求这个数组中子数组的最大和。 要求: 子数组是数组中连续的几个元素数组的元素包含正数,负数,0 思路: 使用动态规划的方式从第n-1个元素开始,向前累加。 如果当前值 大于当前值+以前和则在当前和的位置保存当前值,否则保存当前值+以前和 sum[n-2] = max(a[n-2],  sum[n-1]+a[n-1]), ...
阅读(993) 评论(0)

编程之美 - 子数组的最大乘积

问题描述: 给定一个长度为N的整数数组,只允许用乘法,不许用除法,求数组中任意N-1个数字的最大乘积 想法1: 计算数组中除去 a[i]以外后的其他数字的乘积,然后在其中找到最大值。 s[i] = s[i-1]*arr[i-1];      t[i] = t[i+1]*arr[i+1]; p[i] = s[i]*t[i]; 代码示例中 : calc1()...
阅读(864) 评论(0)

编程之美 - 满足条件的两个数字及扩展问题

问题描述: 对应函数 find_two 快速找出数组中的两个数字,让这两个数字之和等于给定的数字。 想法: 如果把任意两个数字组合进行尝试的话,运算量是N*N不适合。 先将数组进行排序,然后从两头分别取数字进行组合,如果和大于目标数字则在大数字侧找下一个稍小一点的数字。 如果和小于目标数字则在小数字侧找下一个稍大一点的数字 扩展问题 1:  对应函数 find_th...
阅读(801) 评论(0)

编程之美 - 寻找合适的数字

问题描述: 给一个整数N,求一个整数M,使M*N 的十进制结果中只有 1 和 0。 问题分析: 问题从结果入手,十进制表示只有 1 和 0,这个数字的集合有规律,例如: 1,10,11,100,101,110,111..... 10k次方与前面的每个的数的和。 例如 k=1  ==> 10 ,在 10这个阶段的数字有 1 + 10 = 11 例如 k=2  ==> 100 ,在...
阅读(722) 评论(0)
248条 共13页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:445305次
    • 积分:6753
    • 等级:
    • 排名:第3878名
    • 原创:235篇
    • 转载:4篇
    • 译文:9篇
    • 评论:1条
    最新评论