- 博客(244)
- 资源 (32)
- 收藏
- 关注
原创 C++ const
目的: 值代替。 预处理宏定义的缺点: 只做文本替换,并没有类型检查,这样会产生风险。 内存存储形式,常量折叠常量的定义会保存在符号表中,可折叠的常量像宏一样,在预编译阶段对常量的引用一律被替换为常量所对应的值。但在运行时常量也是会被分配内存空间的。下面的程序可以说明。 int main() { const in
2016-11-24 09:32:57 1320
原创 编程之美 - 分层遍历二叉树
问题描述一棵二叉树,按从上到下,从左到右的方式进行遍历,打印它的所有的节点。例如二叉树输出的结果为abcdef 思路:二叉树遍历的方式为分层方式每一层都可以看做是一个链表,根节点level 0可以看做只有一个元素的链表。当遍历level 0时,可以同时将根节点的左右子树放入level 1的链表中。当遍历level1的链表时可以同理生成
2016-10-31 15:46:54 1270
原创 编程之美 - 重建二叉树
问题描述: 给出二叉树先序遍历和中序遍历的结果,根据结果重建二叉树。举例: 例如二叉树先序遍历结果 为 abdcef 中序遍历结果为 dbaecf,现根据结果重构二叉树。思路: 关键需要找到二叉树每一层的根节点和子树的长度。例如先序遍历中根节点必然是第一个 abdcef , 通过中序遍历可以发现 dbaecf a的左侧有两个,右侧有3个,
2016-10-30 17:16:11 1232
原创 编程之美 - 求二叉树节点的最大距离
问题描述:把在二叉树中,从一个节点到另一个节点的需要经过的边数,定义为距离。求一棵二叉树中,距离最远的两个节点之间的距离是多少?问题分析:最远的节点可能出现两种情况:1) 位于根节点下面两棵不同的子树上,例如节点C和D2) 位于根节点下面同一棵子树上,例如节点 F 和 I,他们位于B子树上。这样问题可以转化为求二叉树子树上的最远节点,根节
2016-08-27 10:45:20 1427
原创 编程之美 - 无头链表删除节点
问题描述:一个没有头指针的链表,从其中删除任意一个中间节点(非第一个,也不是最后一个)。思路:没有头指针,所以无法使用遍历的方式找到目标节点的上一个节点。但可以使用的是目标节点的下一个节点。因为当前节点是要被删除的,所以当前节点的值已经不需要被保存了,可以直接用下一个节点的值将其替换。然后,直接删除下一个节点即可。代码:void delete_node(
2016-08-10 09:05:45 1136
原创 编程之美 - 计算字符串相似度
问题描述:有两个不同的字符串,通过使用一套操作方法可以把两个字符串变成一样的。例如:1) "a" 和 "b" ==> 把a变成b,或把b变成a 变化了一次2) "abc" 和 "ade" ==> 把bc变成de,或把de变成bc 变化了两次3) "abcd" 和 "abcde" ==> 删除e 变化了一次每操作一次,两个字符串的距离就
2016-08-05 08:35:21 1415
原创 编程之美 - 电话号码对应英语单词
问题描述:电话的号码盘上一个数字对应着几个字母,一串数字对应着几种字母的组合。现在给定一组数字,列出对应的字母的组合。思路:例如:4对应键盘上 GHI, 2对应键盘上 ABC数字 42 的组合对应的字符串,用树的表现形式: 424:
2016-07-18 08:37:05 1602
原创 编程之美 - 字符串移位包含
问题描述:两个字符串s1, s2,将s1循环位移,判断s2是否被包含在其中。例如:s1 = "ABCD" s2= "CDA" 将s1循环位移后得到BCDA,s2被包含在s1循环位移后的字符串中。思路 1:将s1移位一次,然后与s2比较一次。如果字符串比较长,效率很低。思路 2:假设保留s1移位的结果,例如:s1 = "ABCD" 位移一次
2016-07-11 11:08:03 1170
原创 编程之美 - 只考加法的算术题
问题描述:给定一个正整数 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)
2016-07-10 09:01:50 1079
原创 编程之美 - 区间重合判断
问题描述:给定一个源区间 (x, y)和若干个无序的目标区间 (x0, y0), (x1, y1), (x2, y2), ...... (xn, yn), 判断源区间是否在目标区间内。思路 1:分解源区间把目标区间逐一的映射在源区间上,可以将源区间分解为更小的区间。最后看是否能将源区间全部分解。例如:源区间 {1,6}, 目标区间 {{2,3}, {3,9}, {1,2}
2016-07-07 15:57:40 2457
原创 编程之美 - 数组分割
问题:有一个没有排序,有2N个元素的数组,要求把这个数组分为两部分,分别含有N个元素,并使两个子数组的和最接近。这里的程序主要是计算这个和的值。比如数组 {1, 10, 100, 1000},计算后符合的分法是 {1, 1000} {10, 100} 和算出比较小的就可以了是 110例如数组 {1, 2, 3, 4} 分开后是 {1, 4} 和 {2, 3}
2016-07-02 19:28:17 1756
原创 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
2016-06-23 22:43:50 2917
原创 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
2016-06-21 21:13:26 4520
原创 编程之美 - 数组循环移位
问题描述:将一个数组向右循环移位 k 位,要求只使用两个参数,时间复杂度为 O(N)。思路 1:采用蛙跳的方式,用当前的元素 i,替换第i+k个元素,这样逐一替换N次后,数组被移位完成。当然这时要区分能两种情况,N能整除k 和 N不能整除k,这时跳的方式是不一样的。时间复杂度 O(N)假设 N = 7 k = 3 (N不能整除k), 假设 N = 9 k
2016-06-01 23:03:47 1100
原创 编程之美 - 数组最长子序列
问题描述:求一个一维数组的最长递增子序列,时间复杂度尽可能小。例如:数组 1, -1,2,-3,4,-5,6,-7它的最长递增子序列是 1,2,4,6。思路:创建一个数组,用于记录到它为止递增元素的最大个数。从目标数组的第一个元素开始,寻找从数组0元素开始到当前元素中间的递增的元素个数,并记录。时间复杂度 O(N*N)。#include
2016-06-01 23:01:29 1933
原创 编程之美 - 二维数组最大和的子序列
问题描述:找出二维数组中的最大和的子序列。二维数组中的子序列是二维数组中的一个方块。思路一:使用暴力的方式,从每一个元素开始,变量以它为左上定点的所有的可构造的方块。时间复杂度 N*N*M*M* sum(MN)函数:getMaxSum1()思路二:参考一维数组的方式,将二维数组的转化为一个一维数组后,再进行求和。例如:在二维数组中选择了 a
2016-05-25 10:06:31 2218
原创 编程之美 - 数组最大和的子序列
问题描述:一个数组有N个元素,求这个数组中子数组的最大和。要求:子数组是数组中连续的几个元素数组的元素包含正数,负数,0思路:使用动态规划的方式从第n-1个元素开始,向前累加。如果当前值 大于当前值+以前和则在当前和的位置保存当前值,否则保存当前值+以前和sum[n-2] = max(a[n-2], sum[n-1]+a[n-1]),
2016-05-13 09:22:00 2612
原创 编程之美 - 子数组的最大乘积
问题描述:给定一个长度为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()
2016-05-13 09:19:20 1533
原创 编程之美 - 满足条件的两个数字及扩展问题
问题描述: 对应函数 find_two快速找出数组中的两个数字,让这两个数字之和等于给定的数字。想法:如果把任意两个数字组合进行尝试的话,运算量是N*N不适合。先将数组进行排序,然后从两头分别取数字进行组合,如果和大于目标数字则在大数字侧找下一个稍小一点的数字。如果和小于目标数字则在小数字侧找下一个稍大一点的数字扩展问题 1: 对应函数 find_th
2016-05-13 09:17:36 1136
原创 编程之美 - 寻找合适的数字
问题描述:给一个整数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 ,在
2016-04-14 23:12:55 1065
原创 编程之美 - 浮点数的精确表示
问题描述:如何将浮点数(小数)转换为分数的形式,这样可以更精确的表达出浮点数的值。问题分析:小数可以分为两种,有限小数和无限循环小数。有限小数的处理相对简单:只要把它乘以10的N次方,转换为整数,再和10的N次方都除以它们的最大公约数即可。例如:0.25 把它乘以 10的2次方 变成25, 25/100 分子分母除以最大公约数25变成1/4即可。
2016-04-14 21:44:35 784
原创 07 VoLTE - Signaling - IMS Client Deregistration
触发IMS Deregistration的情形UE触发UE power offUE LTE RAT is disabled网络触发网络将UE从EPC中去附着Service 触发LTE/IMS注册超时IMS注册失败达到最大次数IMS Deregistration的过程1) UE释放与
2016-04-14 21:21:24 1401
原创 06 VoLTE - Signaling - Call Release and Error Handling
VoLTE Call 的释放过程,以及出错时的处理方式。出错时有的情况是可以恢复的,但有时只能让 VoLTE Call 结束。VoLTE Call Release在VoLTE Call的释放过程中, MO UE 和MT UE 都可以主动释放,然后由另一端发送 200 OK进行确认。VoLTE Call Failure 以及 Rec
2016-04-14 21:17:28 1013
原创 05 VoLTE - Signaling - Call Scenarios
VoLTE Call 的建立对于VoLTE call 来说,MO Call 和 MT Call 的过程基本是一致的。这里假设主叫UE和被叫UE已经在IMS网络中注册成功了。并且两个UE都处于RRC Idle状态。呼叫的过程可以大致分为下面 4 个阶段MO-MT VoLTE Call InitiationMO-MT VoLTE Call Proceedin
2016-04-14 21:13:14 2561
原创 04 VoLTE - Signaling - IMS Client Registration
IMS Client Registration过程主要分为两个部分发现 P-CSCFIMS 注册过程P-CSCF Discovery OverviewP-CSCF是通向IMS的网关,它是UE的代理。P-CSCF的信息:P-CSCF IP AddressP-CSCF server portP-CSCF transport pro
2016-04-10 20:02:23 2256
原创 03 VoLTE - Initial LTE Attach
概述Initial LTE Attach 过程包括RRC Connection set upAuthentication and security proceduresPDN connection set upPDN connection 可以看做是IMS PDN set up,并且VoLTE 相关的UE Capability 都在initial ATTAC
2016-04-10 19:58:22 1366
原创 02 VoLTE - Domain Selection 和 VoLTE Signaling Overview
概要关于 VoLTE 信令流程的整理包括几个部分:LTE网络Initial AttachIMS Client 注册VoLTE Call 的建立VoLTE Call 的释放IMS Client 去注册VoLTE Protocol StackSIP 协议可以通过TCP 或 UDP进行传输,RTP/RTCP负责媒体数据的传输域的选择
2016-04-10 17:22:16 1214
原创 01 VoLTE - Introduction
What is VoLTE and Why?Voice Over LTE,,它是一种IP数据传输技术,无需2G/3G网络支持,全部业务承载于4G网络上,可实现数据与语音业务在同一网络下的统一。VoLTE的实现主要是基于IMS框架。语音在LTE网络中传输的几种解决方案Circuit-Switch Fallback (CSFB)可以在
2016-04-10 17:16:28 1059
原创 编程之美 - 1 的数目
问题:给定一个十进制整数N,写下从1开始到N的所有数字,然后数一下其中1的个数。例如N = 16,1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16其中 1 的个数为 9 个。分析:第一种方式比较暴力, 一个数字一个数字的查。复杂度为 N*(log2N)第二种方式找规律,如例子中N
2016-04-07 21:53:55 970
原创 Android 内核 - 05 SystemServer
概要SystemServer 由 ZygoteInit 创建的第一个子进程,负责系统管理framework\base\services\java\com\android\server\SystemServer.javaSystemServer.java中其实包含了两个 class, SystemServer 和 ServerThread。Sy
2016-03-27 21:57:25 514
原创 Android 内核 - 04 Framework 的启动
从Linux的角度看,Android只是Linux中的一个应用程序而已。启动Android便是启动一系列的服务和应用模块。从这个角度去理解Android的启动过程会使问题变得简单点。先启动一个原始进程,加载必要的资源,建立原型,并开启socket等待命令(进程间通信的一种手段)当原始进程收到命令时,把原始进程的资源信息复制一份,fork一个子进程以节省启动时间。
2016-03-26 21:59:46 557
原创 Android 内核 - 03 创建应用窗口 和 子窗口
Android 的窗口分三类,应用窗口,子窗口,系统窗口,这里整理的是应用窗口和子窗口的创建。应用窗口每个Activity会对应着一个窗口。应用窗口的创建,相当于是 Activity,Window(PhoneWindow), WindowManager,WindowManagerImpl,和 View相互关联,并建立互动的一个过程。可以把这个过程分成两个部分,初始化设置和与
2016-03-17 22:17:35 1130
原创 Android 内核 - 02 Context
理解 Context上下文,环境,场景,一个动态的过程,用户和Android系统交互的一次过程。Context贯穿整个App,理解它的源码,可以比较好的理解一个App的执行过程。一个Activity或一个Service本质上就是一次与用户交互的,一个Activity或一Service就对应着一个Context。Context 个数 = Service个数 + Activ
2016-03-17 22:07:31 410
原创 Android 内核 - 01 Binder
Binder 概述Binder是一种架构,一种进程间通信(IPC)的机制,它工作在Linux内核层面,属于驱动层的一个模块。但它其实并不是与硬件打交道,是上层消息转发的一个通道。工作在内核层效率更高。Binder的应用在这种架构中有三个模块,服务端接口,Binder驱动,客户端接口。服务端接口:是Binder的一个对象,向客户
2016-03-17 21:56:59 412
原创 编程之美 - 寻找灌水王及扩展问题
问题描述:在一个论坛中,一个ID发的帖子超过了半数,问怎样能快速的找出这个ID。算法描述:书中给出了几种不同的思考方式,1) 先排序,然后逐个统计2) 排序后,第 N/2个元素一定是这个ID最好的方式是第三种,每次删除两个不同的ID,那么水王的ID在剩下的列表中仍然超过一半。或者可以这样理解 假设总共有10个帖子,6个是水王的,假设水王的
2016-03-17 20:23:06 691
原创 编程之美 - 抓石头游戏(3)
游戏规则: 有两堆石头,玩家A 和 B,两个人可以从一堆石头中取任意数目的石头或从两堆石头中取相同数量的石头。最后取得所有石头的人胜。书中的分析:从最简单的情况入手只有一块石头 == > 先拿的一定会赢。如果两堆石头数目相等 X:X ==> 先拿的一定会赢。如果两堆石头数目为 1 和 2 ==> 先拿的一定会输。那么1 和 2 就
2016-03-11 08:57:09 1230
原创 趣味算法-求波峰波谷最大值
给一个数组,求它的最大的波峰波谷的落差。举例:数组 A={2, 3, 6, 5, 7, 9}, 其中 6 和 9 被看做是波峰,2和5则是波谷。D[2, 6]=4, D[6,5]=1, D=[5,9]=4. 则 Thus, MaxD(A)=4.想法:波峰不一定是数组中的最大值,他是趋势向下的转折点,波谷也不一定是数组中的最小值,他是趋势向上的转折点。数组中最边上的两个元素比较特殊
2016-03-07 20:36:20 14895
原创 趣味算法-0的迷宫
一个 5*5的矩阵,其中包含0-24 25个数字,数字在矩阵中没有顺序,其中0比较特殊,它可以和上下左右不同的数字进行交换,但一定在矩阵的范围内。0和上面的元素交换可以用 "U"表示;0和下面的元素交换可以用 "D"表示;0和左面的元素交换可以用 "L"表示;0和右面的元素交换可以用 "R"表示;举例:[20, 18, 7, 19, 10 24, 4
2016-03-07 20:14:35 461
原创 趣味算法-巧填运算符
给定一个整数数组,和一个单独的数字,在数组的每一个元素中间填加 "+"或"-" 使其运算结果等于单独的数字例如给定的数组为{7 2 4} ,数字为 9。运算结果为7-2+4=9 规则1:数组中元素的位置不能变化。规则2:如果无法实现则输出 Invalid举例:Input:1 2 3 4 101 2 3 4 5Output:1+2+3
2016-02-28 17:10:45 1924
原创 趣味算法-打印数字 (1)
给出一个数字N,按下面的规律打印图形。例如 N=3 输出:1*2*37*8*94*5*6N = 5 输出:1*2*3*4*511*12*13*14*1521*22*23*24*2516*17*18*19*206*7*8*9*10示例程序:#include using namespace std;void pri
2016-02-24 20:03:00 740
实例代码 学习libgdx - SpriteBatch
2014-06-23
多核编程第6章-实例代码
2012-07-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人