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...
- 下一篇
JavaScript编码风格指南
前言 程序语言的编码风格指南对于一个长期维护的软件而言是非常重要的;好的编程风格有助于写出质量更高、错误更少、更易于 维护的程序。 团队合作需要制定一些代码规范还有利用一些工具来强制要求团队代码的风格统一.毕竟很多情况下以后不一定是由写一手代码的人来维护代码,所以有一个统一的代码风格很重要!!! 最近看了一下编写可维护的JavaScript和编写高质量代码:Web前端开发修炼之道,根据书中提倡的一些写法,同时结合我个人的经验和喜好做了一些改动,大致整理了如下JavaScript编码风格 JavaScript编码风格 1.缩进 每一行的层级由4个空格组成,避免使用制表符(Tab)进行缩进 if (true) { doSomething(); } 2.行的长度 每行长度不应该超过80个字符.如果一行多于80个字符,应当在一个运算符(逗号,加好等)后换行.下一级应当增加两级缩进(8个字符). // 好的写法 doSomething(arg1, arg2, arg3, arg4, arg5); // 不好的写法: 第二行只有4个空格的缩进 doSomething(arg1, arg2, arg...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS8编译安装MySQL8.0.19
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Windows10,CentOS7,CentOS8安装Nodejs环境