iOS算法小记
-
说明
- 这是一些iOS面试的小小算法题,在此做个笔记,以供参考和以后的翻阅。
-
用C语言实现字符串的翻转
和计算一个View上的UIImageView的个数
,这两个算法题目,只给出代码,工程文件未做上传,请谅解。 - Demo是一个macOS的命令行工程,为了避免运行模拟器的麻烦。
- 某些代码,并未按照《禅与Objective-C编程艺术》中写的那样规范,请轻喷。
- Demo地址
-
用C语言写一个函数,实现翻转字符串,并考虑时间复杂度、空间复杂度,尽可能最小
/*实现字符串翻转*/ char *reverse_str(char *str) { if(NULL == str) { //字符串为空直接返回 return str; } char *begin; char *end; begin = end = str; while(*end != '\0') { //end指向字符串的末尾 end++; } --end; char temp; while(begin < end) { //取地址,交换两个字符 temp = *begin; *begin = *end; *end = temp; begin++; end--; } return str; //返回结果 } void main() { char str[] = "kengdiedemianshiti"; printf(reverse_str(str)); }
-
用Objective-C语言 实现冒泡排序
//Objective-C 冒泡排序 + (void)inputNeedArray:(NSMutableArray *)array { //依次拿相邻的两个元素做比较 for (int i = 0; i < array.count; ++i) { for (int j = 0; j < array.count - 1; ++j) { if (array[j] < array[j + 1]) { [array exchangeObjectAtIndex:j withObjectAtIndex:j + 1]; } NSString * str = @""; for (NSNumber * value in array) { str = [str stringByAppendingString:[NSString stringWithFormat:@"%zd ",[value integerValue]]]; } NSLog(@"%@",str); } NSLog(@"------"); } }
-
用Objective-C语言 实现选择排序
//Objective-C 选择排序 + (void)inputNeedArray:(NSMutableArray *)array { //拿第一个跟后面的挨个比较 for (int i = 0; i < array.count; i++) { for (int j = i + 1; j < array.count; j++) { if (array[i] < array[j]) { [array exchangeObjectAtIndex:i withObjectAtIndex:j]; } NSString * str = @""; for (NSNumber * value in array) { str = [str stringByAppendingString:[NSString stringWithFormat:@"%zd ",[value integerValue]]]; } NSLog(@"%@",str); } NSLog(@"------"); } }
-
写一个函数,给它传一个数组,去除数组中包含特定字符的元素,并返回一个新的数组
//输入一个数组,返回去除包含"Foo"字符串的元素的一个数组 //[@"A", @"FooB", @"C", @"FooH", @"FooI" + (void)returnNeedArray:(NSMutableArray *)array { NSMutableArray *muArr = [NSMutableArray arrayWithCapacity:1]; for (int i = 0; i < array.count; i++) { if (![array[i] hasPrefix:@"Foo"]) { [muArr addObject:array[i]]; } } NSLog(@"%@", muArr); }
-
写一个函数,将两个有序数组合并后,得到一个新的有序数组,并且无重复元素
+ (NSMutableArray *)combineArray:(NSArray *)arrayNumberOne otherArray:(NSArray *)arrayNumberTwo { // NSArray *array1 = @[@1, @3, @5, @6,]; // NSArray *array2 = @[@2, @3, @4, @5, @7]; NSMutableArray *resultArray = [NSMutableArray arrayWithCapacity:1]; int i = 0; int j = 0; while (i < arrayNumberOne.count && j < arrayNumberTwo.count) { if (arrayNumberOne[i] < arrayNumberTwo[j]) { resultArray[i + j] = arrayNumberOne[i]; i++; } else { resultArray[i + j] = arrayNumberTwo[j]; j++; } } while (i < arrayNumberOne.count) { resultArray[i + j] = arrayNumberOne[i]; i++; } while (j < arrayNumberTwo.count) { resultArray[i + j] = arrayNumberTwo[j]; j++; } //去重 有序 NSOrderedSet *set = [NSMutableOrderedSet orderedSetWithArray:resultArray]; NSLog(@"%@", set.array); return resultArray; }
-
关于GCD的打印问题
+ (void)prinfLogForGCD { dispatch_queue_t queue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_SERIAL); NSLog(@"1 --- %@", [NSThread currentThread]); dispatch_async(queue, ^{ NSLog(@"2 --- %@", [NSThread currentThread]); dispatch_sync(queue, ^{ NSLog(@"3 --- %@", [NSThread currentThread]); }); NSLog(@"4 --- %@", [NSThread currentThread]); }); NSLog(@"5 --- %@", [NSThread currentThread]); }
-
关于object_getClass 和 class的问题
#import <objc/runtime.h> + (void)printLogForObjcgetClassAndClass { XXPrintObjectClass *obj = [XXPrintObjectClass new]; NSLog(@"instance :%p", obj); NSLog(@"class :%p", object_getClass(obj)); NSLog(@"meta class :%p", object_getClass(object_getClass(obj))); NSLog(@"root meta :%p", object_getClass(object_getClass(object_getClass(obj)))); NSLog(@"root meta's meta :%p", object_getClass(object_getClass(object_getClass(object_getClass(obj))))); NSLog(@"---------------------------------------------"); NSLog(@"class :%p", [obj class]); NSLog(@"meta class :%p", [[obj class] class]); NSLog(@"root meta :%p", [[[obj class] class] class]); NSLog(@"root meta's meta :%p", [[[[obj class] class] class] class]); }
-
写一个函数,要求能计算出这个View上的子视图中UIImageView的个数
- (NSInteger)returnUIImageViewNumber:(UIView *)view { static NSInteger a = 0; for (int i = 0; i < view.subviews.count; i++) { if ([[NSString stringWithFormat:@"%@", [view.subviews[i] class]] isEqualToString:@"UIImageView"]) { a++; } else if (view.subviews[i].subviews.count != 0) { [self returnUIImageViewNumber:view.subviews[i]]; } } // NSLog(@"%d", a); return a; }
-
写一个函数,传给它一个二维矩阵和一个数值,来判断是否存在这样的元素在矩阵中
+ (void)checkElementFromArray:(NSArray *)array findNumber:(int)number { BOOL isOrNot = NO; //判断二维数组是否为空 if (array.count != 0) { //总行数 int rows = (int)array.count; NSArray *arr = array[0]; if (arr.count != 0) { //总列数 int columns = (int)arr.count; //行 int row = 0; //列 int column = columns - 1; //最后一个元素 while (row < rows && column >= 0) { NSString *arrStr = [NSString stringWithFormat:@"%@", array[row][column]]; NSString *numStr = [NSString stringWithFormat:@"%d", number]; int arrNumber = [arrStr intValue]; int targetNumber = [numStr intValue]; if (arrNumber == targetNumber) { isOrNot = YES; break; } else if (arrNumber > targetNumber) { --column; } else { ++row; } } } } NSLog(@"%hhd", isOrNot); }

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
redis安装,redis项目以来,redis和spring整合,redis的service,redis的service实现类
redis安装,redis项目以来,redis和spring整合,redis的service,redis的service实现类 一.redis安装: Redis-3.2.6.tar.gz安装,参考方式: 用源码工程来编译安装 1、 到官网下载最新stable版,这里使用的是:redis-3.2.6.tar.gz 2、 cd /usr/local 3、 make redis-src 4、 tar -zxvf redis-3.2.6.tar.gz -C ./redis-src/ 2、解压源码并进入目录cd /usr/local/redis-src/redis-3.2.6 3、先执行make,检查是否报错 如果报错提示缺少gcc,则安装gcc : yum install -y gcc 如果报错提示:Newer version ofjemalloc required 则在make时加参数:make MALLOC=libc(如果没有报错,直接使用make命令) 4、安装redis,指定安装目录,如 /usr/local/redis make PREFIX=/usr/local/redis i...
-
下一篇
【转】Java面试题全集(上)
准备从C#转java,在找工作之前准备看看面试题,有幸看到大神的作品,mark一下,以后慢慢看。。。 2013年年底的时候,我看到了网上流传的一个叫做《Java面试题大全》的东西,认真的阅读了以后发现里面的很多题目是重复且没有价值的题目,还有不少的参考答案也是错误的,于是我花了半个月时间对这个所谓的《Java面试大全》进行了全面的修订并重新发布在我的CSDN博客。在修订的过程中,参照了当时JDK最新版本(Java 7)给出了题目的答案和相关代码,去掉了EJB 2.x、JSF等无用内容或过时内容,补充了数据结构和算法、大型网站技术架构、设计模式、UML、Spring MVC等内容并对很多知识点进行了深入的剖析,例如hashCode方法的设计、垃圾收集、并发编程、数据库事务等。当时我甚至希望把面试中经常出现的操作系统、数据库、软件测试等内容也补充进去,但是由于各种原因,最终只整理出了150道面试题。让我欣慰的是,这150道题还是帮助到了很多人,而且在我CSDN博客上的总访问量超过了5万次,最终还被很多网站和个人以原创的方式转载了。最近一年内,用百度搜索"Java面试"我写的这些东西基本上...
相关文章
文章评论
共有0条评论来说两句吧...