摘要: 算法探讨——再议经典算法问题:求最大子序列和、绝对值最大子序列和以及其区间给定任一数字序列,如{-5,4,-20,16,-2,-3},求出其最大子序列和,绝对值最大子序列和以及对应的区间,在这个例子中,人肉计算可知最大子序列和为16,区间为[3,3)(数组下标从0开始),而绝对值最大子序列和为-21,区间为[0,2],那么算法如何描述及实现呢?在经典的书籍《数据结构与算法分析 C语言描述第2版》中,作者向我们介绍了求最大子序列和的三种算法,时间复杂度从O(N3)下降到O(N),求最大子序列和绝对值和以及其区间是我对这一问题的扩展。一、求最大子序列和以及其区间求最大子序列和的算法相对简单,并且可 阅读全文
posted @ 2012-09-09 11:25 Jone Zhang 阅读(8536) 评论(6) 推荐(1) 编辑
摘要: 通过迭代(非递归)及递归将单链表逆序老生常谈的问题了,不过很多地方面试还是很喜欢问这个问题。实际工程中感觉用处不大,需要逆序的存储为什么要选择单链表呢?为什么不用list(in c++)或iterator(in any language)?或者将数据全部推入栈中再依次弹出。说了这么多有点无聊了,参看酷壳的《我为什么反对纯算法面试》。迭代(非递归)算法描述:设置两个临时指针prev和next分别标记当前结点的前驱和后继,将当前结点的next指针指向前驱,然后把前驱指针替换为当前结点,当前结点替换为next,即向“后”移动,直到链表空了(next为NULL)。C/C++实现: 1 typedef 阅读全文
posted @ 2012-09-08 12:18 Jone Zhang 阅读(3712) 评论(3) 推荐(0) 编辑
摘要: C堆上申请二维数组之前写了一篇《C++堆上申请二维数组》,应该说C++的方式相对于C还是更简单容易理解一些,那么C如何写呢?方法一:通过数组指针申请连续的空间 1 #include <stdio.h> 2 #include <stdlib.h> 3 int main() 4 { 5 // 申请a[3][2]三行两列二维数组 6 int (*a)[2] = (int(*)[2])malloc(sizeof(int)*3*2); 7 a[0][0] =1; 8 a[0][1] =2; 9 a[1][0] =3;10 a[1][1] = 4;11 ... 阅读全文
posted @ 2012-09-07 11:31 Jone Zhang 阅读(2962) 评论(1) 推荐(0) 编辑
摘要: Using Property in Obj-C(Obj-C中属性的使用)基础格式:1 @interface YourMotherObject : YourMothersMotherObject2 {3 ... // 声明成员变量4 }5 @property (属性值) 成员变量类型 成员变量名6 @end属性值介绍(懒得写,Copy来的):readonly此标记说明属性是只读的,默认的标记是读写,如果你指定了只读,在@implementation中只需要一个读取器。或者如果你使用@synthesize关键字,也是有读取器方法被解析。而且如果你试图使用点操作符为属性赋值,你将得到一个编译... 阅读全文
posted @ 2012-09-06 17:04 Jone Zhang 阅读(761) 评论(0) 推荐(1) 编辑
摘要: 两种方法都可以,好坏自己体会:方法一:终端输入:1 defaults write com.apple.finder AppleShowAllFiles TRUE2 killall Finder同理将上面的TRUE改回FALSE就可以恢复隐藏方法二:终端输入:1 cd /2 sudo chflangs nohidden *要恢复隐藏属性,嘿嘿:1 sudo chflags hidden * 阅读全文
posted @ 2012-09-06 16:26 Jone Zhang 阅读(10208) 评论(0) 推荐(0) 编辑
摘要: Singleton on iOS (Obj-C实现单例模式)参考地址:http://www.duckrowing.com/2010/05/21/using-the-singleton-pattern-in-objective-c/Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->static MyGizmoClass *sharedGizmoManager = nil;+ (MyGizmoClass*)sharedManager{@synchr 阅读全文
posted @ 2012-09-06 16:14 Jone Zhang 阅读(494) 评论(0) 推荐(0) 编辑
摘要: (转载)内部排序算法总结1.冒泡排序(Bubble Sort)冒泡排序方法是最简单的排序方法。这种方法的基本思想是,将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个“气泡”序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即“轻”的元素在下面,就交换它们的位置。显然,处理一遍之后,“最轻”的元素就浮到了最高位置;处理二遍之后,“次轻”的元素就浮到了次高位置。在作第二遍处理时,由于最高位置上的元素已是“最轻”元素,所以不必检查。一般地,第i遍处理时,不必检查第i高 阅读全文
posted @ 2012-09-06 16:09 Jone Zhang 阅读(465) 评论(0) 推荐(0) 编辑
摘要: 判断单链表是否存在环及求环入口点算法描述:1、先判断是否有环设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾部为NULL,则为无环链表) 1 bool isExitsLoop(list *head) 2 { 3 list *slow = head, *fast = head; 4 5 while ( fast && fast->next ) 6 { 7 slow = slow->next; 8 ... 阅读全文
posted @ 2012-09-06 15:53 Jone Zhang 阅读(9515) 评论(3) 推荐(0) 编辑
摘要: C++堆上申请二维数组假设要申请的是double型大小m*n数组有如下方法方法一:优点:申请的空间是连续的 缺点:较难理解1 double (*d)[n] = new double[m][n]方法二:优点:容易理解 缺点:申请的空间不能连续且需要多个指针才能管理double *d[m];for (int i=0; i<m; i++) d[i] = new double[n]; 阅读全文
posted @ 2012-09-06 15:28 Jone Zhang 阅读(3470) 评论(0) 推荐(1) 编辑