11 2013 档案
词典对象 NSDictionary与NSMutableDictionary
摘要:做过Java语言或者C语言开发的朋友应该很清楚关键字map吧,它可以将数据以键值对儿的形式储存起来,取值的时候通过KEY就可以直接拿到对应的值,非常方便,是一种非常常用的数据结构。在Objective-C语言中,当然也有这方面的支持,词典对象就是做这个事情的,不过在同一个词典对象中可以保存多个不同类型的数据,不像Java与C只能保存声明的相同类型的数据,这一点还是可以解决不少问题的。词典的关键字为NSDictionary与NSMutableDictionary。对OC稍有认识的朋友应该从关键字的结构就可以看出这两个的区别。很明显前者为不可变词典,后者为可变词典。1.创建不可变词典[NSDict 阅读全文
posted @ 2013-11-29 15:30 猿人谷 阅读(1485) 评论(0) 推荐(0) 编辑
Delegate
摘要:转自:http://blog.csdn.net/amdbenq/article/details/7865988首先,大家应该都明白的是委托是协议的一种,顾名思义,就是委托他人帮自己去做什么事。也就是当自己做什么事情不方便的时候,就可以建立一个委托,这样就可以委托他人帮自己去实现什么方法。 其次,我简单的总结了一下自己用到的委托的作用有两个,一个是传值,一个是传事件。1.所谓传值经常用在b类要把自己的一个数据或者对象传给a类,让a类去展示或者处理。(切分紧耦合,和代码分块的时候经常用)2.所谓传事件就是a类发生了什么事,把这件事告诉关注自己的人,也就是委托的对象,由委托的对象去考虑发生这个事件后 阅读全文
posted @ 2013-11-29 13:49 猿人谷 阅读(359) 评论(0) 推荐(0) 编辑
Objective-C中的hasPrefix
摘要:Objective-C中的hasPrefix hasPrefix:方法的功能是判断创建的字符串内容是否以某个字符开始,其语法形式如下:-(BOOL)hasPrefix:(NSString*)aString; 其中,(NSString *)aString;用来指定字符串。该方法的返回值为BOOL,当BOOL为YES或者为1时,则字符串是以某个字符开始;当BOOL为NO或者为0时,则字符串不是以某个字符开始。【示例】以下程序通过使用hasPrefix:方法来判断使用stringWithCString:方法创建的字符串是否以字母B开始,如果是以字母B开始,输出开头为字母B;如果不是,输出开头不为字母 阅读全文
posted @ 2013-11-29 12:00 猿人谷 阅读(12491) 评论(0) 推荐(0) 编辑
NSLog
摘要:在Objective-C中,NSLog相当于C语言中的printf,常用于文字输出。1.NSLog定义NSLog定义在NSObjCRuntime.h中,如下所示:void NSLog(NSString *format, …);基本上,NSLog很像printf,同样会在console中输出显示结果。不同的是,传递进去的格式化字符是NSString的对象,而不是char *这种字符串指针。2.示例NSLog可以如下面的方法使用:NSLog (@"this is a test");NSLog (@"string is :%@", string);NSLog 阅读全文
posted @ 2013-11-29 11:45 猿人谷 阅读(612) 评论(0) 推荐(0) 编辑
(转载)ios的一些知识点
摘要:ios的一些知识点一 非ARC的内存管理情况1-autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象。当用户的代码运行告一段落,开始等待用户的操作,自动释放池就会被释放掉(调用dealloc),池中的对象都会收到一个release,有可能会因此被销毁。2-成员属性:readonly:不指定readonly,默认合成getter和setter方法。外界毫不关心的成员,则不要设置任何属性,这样封装能增加代码的独立性和安全性。相当于私有成员?assign:表示只进行简单的赋值,不会发送retain消息。retain:会向旧值发送rel 阅读全文
posted @ 2013-11-29 11:17 猿人谷 阅读(590) 评论(0) 推荐(0) 编辑
关于ios发布AppStore验证UUID不过的问题
摘要:转载于:http://blog.csdn.net/iunion/article/details/9045573刚刚更新过的代码出现了问题,在上传之前的验证就不通过,提示Apps arenot permitted to access theUDIDand must not use theuniqueIdentifiermethod ofUIDevice. Please update your apps and servers to associate users with theVendororAdvertising identifiersintroduced in iOS 6。于是很纠结怎么解 阅读全文
posted @ 2013-11-29 11:15 猿人谷 阅读(3008) 评论(0) 推荐(0) 编辑
字典的基本概念和常用方法
摘要:字典使用Key-Value的形式储存数据。字典中的对象储存没有顺序,使用key来表示每个对象。cocoa框架中的字典:NSDictionary和NSMutableDictionaryNSMutableDictionary是NSictionary的子类,能使用其所有方法。NSMutableDictionary是NSDictionary的可修改版本 1 #import 2 int main(int argc, const char * argv[]) 3 { 4 @autoreleasepool { 5 //不可变字典NSDictionary 6 //字典的... 阅读全文
posted @ 2013-11-29 10:32 猿人谷 阅读(652) 评论(0) 推荐(0) 编辑
UIButton使用方法汇总
摘要://按钮初始化类方法UIButton*button1=[UIButtonbuttonWithType:UIButtonTypeRoundedRect];//这里创建一个圆角矩形的按钮//按钮初始化实例方法UIButton *button1=[[UIButton alloc]initWithFrame:CGRectMake(50,300, 200, 50)];能够定义的button类型有以下6种,//typedefenum{//UIButtonTypeCustom=0,自定义风格//UIButtonTypeRoundedRect,圆角矩形//UIButtonTypeDetailDisclosur 阅读全文
posted @ 2013-11-28 19:40 猿人谷 阅读(1307) 评论(0) 推荐(0) 编辑
在Xcode中显示代码行号
摘要:打开一个程序,点击屏幕菜单栏的Xcode,然后选Xcode -> Preferences -> Text Editing -> Show line numbers前面打勾就行了。如下图: 阅读全文
posted @ 2013-11-28 19:17 猿人谷 阅读(1700) 评论(0) 推荐(0) 编辑
关于在堆中创建字符串对象的疑惑
摘要:方法1.直接赋值: NSString *str1 = @"my string";方法2.类函数初始化生成: NSString *str2 =[NSString stringWithString:str1];方法3.实例方法初始化生成: NSString *str3 = [[NSString alloc]initWithString:@"my string"]; NSString *str4 = [[NSStringalloc]initWithFormat:@"my string"]; NSLog(@"---%p", 阅读全文
posted @ 2013-11-28 17:24 猿人谷 阅读(457) 评论(0) 推荐(0) 编辑
IOS atomic与nonatomic,assign,copy与retain的定义和区别
摘要:atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。 atomic 设置成员变量的@property属性时,默认为atomic,提供多线程安全。 在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。加了atomic,setter函数会变成下面这样: {lock} if (property != newValue) { [property release]; property = [newValue retain]; ... 阅读全文
posted @ 2013-11-28 14:22 猿人谷 阅读(413) 评论(0) 推荐(0) 编辑
非常优秀的iphone学习文章总结!
摘要:This site contains a ton of fun tutorials – so many that they were becoming hard to find! So I put together this little page to help everyone quickly find the tutorial they’re looking for. Hope you enjoy! :]Beginning iPhone ProgrammingiPhone programming is like a ladybug - fun and only a little scar 阅读全文
posted @ 2013-11-26 13:13 猿人谷 阅读(566) 评论(0) 推荐(0) 编辑
转载:开源一款酷跑游戏源码完整版
摘要:来源:http://www.cnblogs.com/lianwei/p/3424871.html前几个月时间在网上下载一个类似这样的ios游戏源码,然后自己进行修改和升级一下,现在开源出来给大家吧,该游戏源码我也上传到一些网站上了,感 觉还不错,特别是喜欢ios游戏开发的朋友可以下载学习吧,源码我已经上传在源码天堂那里了,大家也可以去那里直接下载即可,如果有什么想法或观点可以在 下面留下,我会定时过来看看的。源码文件大小:36.01 MB,文件太大了,大家可以直接在那个叫源码天堂的网站下载吧。http://code.662p.com/view/3484.html 阅读全文
posted @ 2013-11-26 13:04 猿人谷 阅读(1845) 评论(0) 推荐(0) 编辑
Xcode常用快捷键
摘要:xcode相关:关于xcode可设偏好设置 command+,清空缓存 可设隐藏xcode command+h隐藏其它 command+option+h显示全部 可设退出xcode command+q文件相关:新建项目 command+shift+n新建文件 command+n新建空文件 command+control+n打开 command+o在新窗口中打开 command+option+o快速打开 command+shift+d / command+shift+alt+d (不知区别是什么)清空最近打开文件 可设清空最近打开项目 可设Get Info command+i显示检查器? com 阅读全文
posted @ 2013-11-26 13:01 猿人谷 阅读(3320) 评论(0) 推荐(0) 编辑
第一个OC的类
摘要:来源:http://www.cnblogs.com/mjios/archive/2013/04/06/3002814.html本文目录一、语法简介二、用Xcode创建第一个OC的类三、第一个类的代码解析四、添加成员变量五、添加方法六、跟Java的比较七、创建对象八、访问公共成员变量和方法说明:这个Objective-C专题,是学习iOS开发的前奏,也为了让有面向对象语言开发经验的程序员,能够快速上手Objective-C。如果你还没有编程经验,或者对Objective-C、iOS开发不感兴趣,请忽略。学习本专题之前,建议先学习C语言专题。OC是一门面向对象的语言,因此它也有类、对象、静态\动态 阅读全文
posted @ 2013-11-25 10:56 猿人谷 阅读(12163) 评论(0) 推荐(0) 编辑
error: 'release' is unavailable: not available in automatic reference counting,该怎么解决
摘要:编译出现错误:'release' is unavailable: not available in automatic reference counting mode..解决办法:You need to turn offAutomatic Reference Counting. You do this by clicking on your project in the navigator (the top item in the finder-like thing on the left), then click on your target, select"Bui 阅读全文
posted @ 2013-11-24 10:58 猿人谷 阅读(1677) 评论(0) 推荐(0) 编辑
在Mac OS X上配置Apache2
摘要:转载:http://www.cnblogs.com/yuanyq/p/3435022.html#2821339最近一段时间在开发面向移动设备的网页,而且是静态网页。所以很需要一个HTTP服务器,简单明了的就可以。在Windows上,HFS(http://www.rejetto.com/hfs/) 是我比较钟爱的一个小工具,并且还是免费。在Mac电脑上,尝试了几款轻量的HTTP文件服务器,感觉都不是很理想。比如App Store里面的SimpleHTTPServer,我甚至花了25块钱购买了Pro版,竟然连最基本的HTTP Range都不支持。还有就是Python带的那个SimpleHTTPSe 阅读全文
posted @ 2013-11-23 20:51 猿人谷 阅读(5098) 评论(0) 推荐(0) 编辑
O(n)时间的排序
摘要:题目:某公司有几万名员工,请完成一个时间复杂度为O(n)的算法对该公司员工的年龄作排序,可使用O(1)的辅助空间。 题目特别强调是对一个公司的员工的年龄作排序。员工的数目虽然有几万人,但这几万员工的年龄却只有几十种可能。上班早的人一般也要等到将近二十岁才上班,一般人再晚到了六七十岁也不得不退休。 由于年龄总共只有几十种可能,我们可以很方便地统计出每一个年龄里有多少名员工。举个简单的例子,假设总共有5个员工,他们的年龄分别是25、24、26、24、25。我们统计出他们的年龄,24岁的有两个,25岁的也有两个,26岁的一个。那么我们根据年龄排序的结果就是:24、24、25、25、26,即在表示年龄 阅读全文
posted @ 2013-11-15 10:54 猿人谷 阅读(469) 评论(0) 推荐(0) 编辑
翻转句子中单词的顺序
摘要:题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。由于本题需要翻转句子,我们先颠倒句子中的所有字符。这时,不但翻转了句子中单词的顺序,而且单词内字符也被翻转了。我们再颠倒每个单词内的字符。由于单词内的字符被翻转两次,因此顺序仍然和输入时的顺序保持一致。还是以上面的输入为例子。翻转“I am a student.”中所有字符得到“.tneduts a ma I”,再翻转每个单词中字符的顺序得到“students. a am I” 阅读全文
posted @ 2013-11-15 10:27 猿人谷 阅读(878) 评论(0) 推荐(0) 编辑
成员以其在类中声明的顺序构造
摘要:分析以下代码的输出:#includeusing namespace std;class A{public: A(int j):age(j) , num(age + 1) { cout<<"age:"<<age<<",num:"<<num<<endl; }protected: int num; int age;};void main(){ A sa(15);}运行结果:age:15 , num:2(num为一个随机数)由于按成员在类定义中的声明顺序进行构造,而不是按构造函数说明中冒号后面的顺序,所 阅读全文
posted @ 2013-11-12 16:58 猿人谷 阅读(1241) 评论(0) 推荐(0) 编辑
在字符串中删除特定的字符
摘要:题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。首先我们考虑如何在字符串中删除一个字符。由于字符串的内存分配方式是连续分配的。我们从字符串当中删除一个字符,需要把后面所有的字符往前移动一个字节的位置。但如果每次删除都需要移动字符串后面的字符的话,对于一个长度为n的字符串而言,删除一个字符的时间复杂度为O(n)。而对于本题而言,有可能要删除的字符的个数是n,因此该方法就删除而言的时间复杂度为O(n2)。事实上,我们并不需要在每次删除一个字符的时候都去移 阅读全文
posted @ 2013-11-12 15:41 猿人谷 阅读(2192) 评论(0) 推荐(0) 编辑
第一个只出现一次的字符
摘要:题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。看到这道题时,最直观的想法是从头开始扫描这个字符串中的每个字符。当访问到某字符时拿这个字符和后面的每个字符相比较,如果在后面没有发现重复的字符,则该字符就是只出现一次的字符。如果字符串有n个字符,每个字符可能与后面的O(n)个字符相比较,因此这种思路时间复杂度是O(n2)。我们试着去找一个更快的方法。由于题目与字符出现的次数相关,我们是不是可以统计每个字符在该字符串中出现的次数?要达到这个目的,我们需要一个数据容器来存放每个字符的出现次数。在这 个数据容器中可以根据字符来查找它出现的次数,也就是说这个容器的作用 阅读全文
posted @ 2013-11-12 15:32 猿人谷 阅读(1204) 评论(0) 推荐(0) 编辑
memset函数使用方法
摘要:将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。需要的头文件在C中 在C++中 更详细的解说见百度百科 -->http://baike.baidu.com/view/982208.htm1. void *memset(void *s,int c,size_t n)总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。2。例子void main(){char *s="Golden Global View";clrscr();memset(s, 阅读全文
posted @ 2013-11-12 15:10 猿人谷 阅读(61342) 评论(1) 推荐(2) 编辑
判断二叉树是不是平衡
摘要:平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。例如下图中的二叉树就是一棵平衡二叉树:在本系列博客的第27题,我们曾介绍过如何求二叉树的深度。有了求二叉树的深度的经验之后再解决这个问题,我们很容易就能想到一个思路:在遍历树的每个结点的时候,调用函数TreeDepth得到它的左右子树的深度。如果每个结点的左右子树 阅读全文
posted @ 2013-11-11 13:33 猿人谷 阅读(1932) 评论(0) 推荐(0) 编辑
二叉树的深度
摘要:题目:输入一棵二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。例如:输入二叉树: 10 / \ 6 14 / / \ 4 12 16输出该树的深度3。二叉树的结点定义如下:struct SBinaryTreeNode // a node of the binary tree{ int m_nValue; // value of node SBinaryTreeNode *m_pLeft; // left child of node SBinaryTreeNo... 阅读全文
posted @ 2013-11-11 13:18 猿人谷 阅读(518) 评论(0) 推荐(0) 编辑
二叉搜索树的后序遍历序列
摘要:题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / \ 6 10 / \/ \ 5 7911因此返回true。如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。分析:这是一道trilogy的笔试题,主要考查对二元查找树的理解。在后续遍历得到的序列中,最后一个元素为树的根结点。从头开始扫描这个序列,比根结点小的元素都应该位于序列的左半部分;从第一个大于根结点开始到根结点前面的一个元素为止,所有元素都应该大于根结点,因为 阅读全文
posted @ 2013-11-11 10:36 猿人谷 阅读(599) 评论(0) 推荐(0) 编辑
数对之差的最大值
摘要:题目:在数组中,数字减去它右边的数字得到一个数对之差。求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11,是16减去5的结果。分析:看到这个题目,很多人的第一反应是找到这个数组的最大值和最小值,然后觉得最大值减去最小值就是最终的结果。这种思路忽略了题目中很重要的一点:数对之差是一个数字减去它右边的数字。由于我们无法保证最大值一定位于数组的左边,因此这个思路不管用。于是我们接下来可以想到让每一个数字逐个减去它右边的所有数字,并通过比较得到数对之差的最大值。由于每个数字需要和它后面的O(n)个数字作减法,因此总的时间复杂度是O(n2)。 阅读全文
posted @ 2013-11-04 19:26 猿人谷 阅读(1700) 评论(0) 推荐(0) 编辑
字符串的组合
摘要:题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。此题也可以变换为字符串的排列。假设我们想在长度为n的字符串中求m个字符的组合。我们先从头扫描字符串的第一个字符。针对第一个字符,我们有两种选择:一是把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选取m-1个字符;二是不把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选择m个字符。这两种选择都很容易用递归实现。下面是这种思路的参考代码:void Combination(char* string){ if(string == NULL) ... 阅读全文
posted @ 2013-11-04 17:10 猿人谷 阅读(587) 评论(0) 推荐(0) 编辑
求二元查找树的镜像
摘要:题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。例如输入: 8 / \ 6 10/\ /\5 7 9 11输出: 8 / \ 10 6/\ /\119 7 5定义二元查找树的结点为:struct BSTreeNode // a node in the binary search tree (BST){ int m_nValue; // value of node BSTreeNode *m_pLeft; // left child of node ... 阅读全文
posted @ 2013-11-04 16:56 猿人谷 阅读(495) 评论(0) 推荐(0) 编辑
字符串的排列
摘要:题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab、cba。求整个字符串的排列,可以看成两步:首先求所有可能出现在第一个位置的字符,即把第一个字符和后面所有的字符交换。下图就是分别把第一个字符a和后面b、c等字符交换的情形。第二步固定第一个字符(如图a所示),求后面所有字符的排列。这个时候我们仍把后面的所有字符分成两部分:后面字符的第一个字符,以及这个字符之后的所有字符。然后把第一个字符逐一和它后面的字符交换(如图b所示)。。。分析到这里,其实可以看出,这就是很典型的递归思路。实现代码 阅读全文
posted @ 2013-11-04 10:09 猿人谷 阅读(509) 评论(0) 推荐(0) 编辑
树的子结构
摘要:题目:输入两棵二叉树A和B,判断B是不是A的子结构。二叉树结点的定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};例如图中的两棵二叉树,由于A中有一部分子树的结构和B是一样的,因此B是A的子结构。要查找树A中是否存在和树B结构一样的子树,可以分成两步:第一步在树A中找到和B的根节点的值一样的结点R;第二步再判断树A中以R为根结点的子树是不是包含和树B一样的结构。第一步在树A中查找与根结点的值一样的结点,这实际上就是树... 阅读全文
posted @ 2013-11-03 21:36 猿人谷 阅读(6990) 评论(1) 推荐(3) 编辑
从上到下打印二叉树——层序遍历二叉树
摘要:题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入 8 / \ 6 10 /\ /\5 7 9 11输出8 6 10 5 7 9 11。二叉树结点的定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};从上到下打印二叉树的规律:每一次打印一个结点的时候,如果该结点有子结点,则把该结点的子结点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的结点,重复前面的打印操作,直至队列中所有的结... 阅读全文
posted @ 2013-11-03 19:10 猿人谷 阅读(10337) 评论(0) 推荐(0) 编辑
合并两个排序的链表
摘要:题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。例如下图中的链表1和链表2,则合并之后的升序链表如链表3所示。链表结点定义如下:struct ListNode{ int m_nValue; ListNode *m_pNext;}; 注:链表1和链表2是两个递增排序的链表,合并这两个链表得到升序链表为链表3.首先分析合并两个链表的过程。我们的分析从合并两个链表的头结点开始。链表1的头结点的值小于链表2的头结点的值,因此链表1的头结点将是合并后链表的头结点。如下图所示。链表1的头结点的值小于链表2的头结点的值,因此链表1的头结点是合并后链表的头结点。在剩余的结点 阅读全文
posted @ 2013-11-03 18:31 猿人谷 阅读(14091) 评论(0) 推荐(1) 编辑
斐波那契额数列及青蛙跳台阶问题
摘要:题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。斐波那契(Fibonacci)数列定义如下:效率很低的解法:long long Fibonacci_Solution1(unsigned int n){ if(n 2时,第一次跳的时候就有两种不同的选择:一是第一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n-1);另一种选择是第一次跳2级,此时跳法数目等于后面剩下n-2级台阶的跳法数目,即为f(n-2)。因此,n级台阶的不同跳法的总数f(n)=f(n-1)+f(n-2)。分析到这里,不难看出这实际上就是斐波那契数列了。#includeusi... 阅读全文
posted @ 2013-11-03 17:01 猿人谷 阅读(7368) 评论(0) 推荐(0) 编辑
旋转数组的最小数字
摘要:题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1.实现数组的旋转见左旋转字符串。和二分查找法一样,用两个指针分别指向数组的第一个元素和最后一个元素。我们注意到旋转之后的数组实际上可以划分为两个排序的子数组,而且前面的子数组的元素都大于或者等于后面子数组的元素。我们还可以注意到最小的元素刚好是这两个子数组的分界线。我们试着用二元查找法的思路在寻找这个最小的元素。首先我们用两个指针,分别指向数组的第一个元素和最后一个元素。按照题目旋转 阅读全文
posted @ 2013-11-03 16:13 猿人谷 阅读(2387) 评论(0) 推荐(0) 编辑
扑克牌的顺子
摘要:题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成任意数字。可以把5张牌看成由5个数字组成的数组。大、小王是特殊的数字,我们不妨把它们定义为0,这样就能和其他扑克牌区分开来了。接下来我们分析怎样判断5个数字是不是连续的,最直观的方法是把数组排序。值得注意的是,由于0可以当成任意数字,我们可以用0去补满数组中的空缺。如果排序之后的数组不是连续的,即相邻的两个数字相隔若干个数字,但只要我们有足够的0可以补满这两个数字的空缺,这个数组实际上还是连续的。举个例子,数组排序之后为{0,1,3,4,5},在 阅读全文
posted @ 2013-11-03 10:55 猿人谷 阅读(2276) 评论(0) 推荐(0) 编辑
qsort(),sort()排序函数
摘要:一.qsort()函数功 能: 使用快速排序例程进行排序头文件:stdlib.h用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));参数: 1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序qsort(即,quicksort)主要根据你给的比较条件给一个快速排序,主要是通过指针移动实现排序功能。排序之后的结果仍然放在原来数组中。其中qsort和compare的用法如下:void qs... 阅读全文
posted @ 2013-11-03 09:56 猿人谷 阅读(14802) 评论(0) 推荐(1) 编辑
从尾到头打印链表
摘要:题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。链表结点定义如下:struct ListNode{ int m_nKey; ListNode *m_pNext;};解决这个问题肯定要遍历链表。遍历的顺序是从头到尾的顺序,可输出的顺序却是从尾到头。也就是说第一个遍历到的结点最后一个输出,而最后一个遍历到得结点第一个输出。这就是典型的“后进先出”,可以用栈实现这种顺序。每经过一个结点的时候,把该结点放到一个栈中。当遍历完整个链表后,再从栈顶开始逐个输出结点的值,此时输出的结点的顺序已经反转过来了。实现代码如下:void PrintListReverse(ListNode... 阅读全文
posted @ 2013-11-02 21:28 猿人谷 阅读(3226) 评论(0) 推荐(0) 编辑
查找链表中倒数第k个结点
摘要:题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};分析:为了得到倒数第k个结点,很自然的想法是先走到链表的尾端,再从尾端回溯k步。可是输入的是单向链表,只有从前往后的指针而没有从后往前的指针。因此我们需要打开我们的思路。既然不能从尾结点开始遍历这个链表,我们还是把思路回到头结点上来。假设整个链表有n个结点,那么倒数第k个结点是从头结点开始的第n-k-1个结点(从0开始计数)。如果我们能够得到链表中结点的个数n,... 阅读全文
posted @ 2013-11-01 22:07 猿人谷 阅读(789) 评论(0) 推荐(0) 编辑
左旋转字符串
摘要:来源:http://blog.csdn.net/v_july_v/article/details/6322882题目描述:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部,如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。指针翻转法 咱们先来看个例子,如下:abc defghi,若要让abc移动至最后的过程可以是:abc defghi->def abcghi->def ghiabc 如此,我们可定义俩指针,p1指向ch[0],p2指向ch[m];一下过程循环m次,交换p1和p2所指元素,然后p1++, p2++;。第一步,交换abc 阅读全文
posted @ 2013-11-01 11:58 猿人谷 阅读(1157) 评论(0) 推荐(0) 编辑