-
說明
- 這是一些iOS面試的小小算法題,在此做個筆記,以供參考和以后的翻閱拱绑。
-
用C語言實(shí)現(xiàn)字符串的翻轉(zhuǎn)
和計算一個View上的UIImageView的個數(shù)
,這兩個算法題目丽蝎,只給出代碼猎拨,工程文件未做上傳,請諒解屠阻。 - Demo是一個macOS的命令行工程红省,為了避免運(yùn)行模擬器的麻煩。
- 某些代碼国觉,并未按照《禪與Objective-C編程藝術(shù)》中寫的那樣規(guī)范吧恃,請輕噴。
- Demo地址
-
用C語言寫一個函數(shù)麻诀,實(shí)現(xiàn)翻轉(zhuǎn)字符串痕寓,并考慮時間復(fù)雜度傲醉、空間復(fù)雜度,盡可能最小
/*實(shí)現(xiàn)字符串翻轉(zhuǎn)*/ 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; //返回結(jié)果 } void main() { char str[] = "kengdiedemianshiti"; printf(reverse_str(str)); }
-
用Objective-C語言 實(shí)現(xiàn)冒泡排序
//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語言 實(shí)現(xiàn)選擇排序
//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(@"------"); } }
-
寫一個函數(shù)硬毕,給它傳一個數(shù)組,去除數(shù)組中包含特定字符的元素礼仗,并返回一個新的數(shù)組
//輸入一個數(shù)組吐咳,返回去除包含"Foo"字符串的元素的一個數(shù)組 //[@"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); }
-
寫一個函數(shù),將兩個有序數(shù)組合并后元践,得到一個新的有序數(shù)組韭脊,并且無重復(fù)元素
+ (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; }
-
關(guān)于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]); }
-
關(guān)于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]); }
-
寫一個函數(shù),要求能計算出這個View上的子視圖中UIImageView的個數(shù)
- (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; }
-
寫一個函數(shù)单旁,傳給它一個二維矩陣和一個數(shù)值涤垫,來判斷是否存在這樣的元素在矩陣中
+ (void)checkElementFromArray:(NSArray *)array findNumber:(int)number { BOOL isOrNot = NO; //判斷二維數(shù)組是否為空 if (array.count != 0) { //總行數(shù) int rows = (int)array.count; NSArray *arr = array[0]; if (arr.count != 0) { //總列數(shù) 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); }