Objective-C在随机数中取最长的递增序列的长度

2017-12-16  本文已影响0人  TianKengZhe

// 从随机数发生器中连续取出1000个数字组成的序列,求其中最长的递增序列的长度;例如取出 [1,9,5,6,8,2,4],最长的递增序列是[5,6,8],长度为3。#importint main(int argc, const char * argv[]) {

@autoreleasepool {

int length = 1; //保存递增序列的长度

int index = 0; //保存递增序列最大的数组下标

int tempLength = 1; //临时递增序列长度

//定义一个可变数组,添加1000个随机数到数组中

NSMutableArray *numbers = [NSMutableArray array];

for (int i = 0; i < 1000; i++) {

int temp = arc4random_uniform(1000) + 1;

[numbers addObject:[NSNumber numberWithInteger:temp]];

}

//遍历数组,比对数组相邻2个数字之间的大小,如果左边小于右边,则为递增序列,长度length自动+1,如果左边大于右边,那么递增序列结束,给出判断临时序列长度tempLength是否小于当前递增序列length的长度,如果小于,则将length的值赋给tempLength,再将length重置为1(因为至少有1位数字,好让继续进行下次循环时计算新的递增序列长度),继续循环直到结束,即可取出最大的递增序列长度tempLength,此递增序列的最大数组下标index。

for (int i = 0; i < numbers.count - 1; i++) {

if (numbers[i] < numbers[i+1]) {

length++;

}else{

if (tempLength < length) {

tempLength = length;

index = i;

}

length = 1;

}

}

//定义一个可变数组,从最大递增序列下标index开始,向前循环,将原始数组numbers中的元素添加到serialNumbers数组中(此处也可以正常循环,(i = index - tempLength +1; i <=index;i++)这样后面可以省略反向排序数组,定义新数组保存的操作)

NSMutableArray *serialNumbers = [NSMutableArray array];

for (NSInteger i = index; i > index - tempLength; i--) {

[serialNumbers addObject:numbers[i]];

}

//反向排序serialNumbers数组,使用newSerialNumbers数组保存

NSArray *newSerialNumbers = [[serialNumbers reverseObjectEnumerator] allObjects];

//打印newSerialNumbers数组和数组长度

NSLog(@"The serialNumbers is %@,the length is %ld",newSerialNumbers,[newSerialNumbers count]);

}

return 0;

}

这是朋友的面试题,我使用Objective-C给出的解决方案,与大家交流。

上一篇 下一篇

猜你喜欢

热点阅读