前言
作为一个iOS开发人员,开发工作经验5年,对数据结构与算法一直不够重视,最近对项目进行优化,发现算法还是比较重要的,后续每天都发表一篇算法题,以此提高自己的开发思维,每天贴上的代码,都会在github上面有提交,有需要的可以自行下载;
正文开始
题目:给定一个无需的整数数组,找出其中最长的子序列长度
举例:
输入:[10,9,2,5,3,7,101,18]
输出: 4
解释:最长的上升子序列的组合,你只需要输出对应的长度即可
说明:
可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。
算法的时间复杂度:最差为:O(n²),最小为O(n)
/**
思路,从第一个位置开始往后循环判断,每个位置的升序数量,保存最大值
时间复杂度基本为:最差为:O(n²),最小为O(n)
:----0.002150
**/
void bruteForce(NSArray *dataArr)
{
//如果数组中没有值,就直接返回
if (!dataArr.count) {
return;
}
int res =1;
for (int i = 0; i < dataArr.count; i++) {
//当前循环的升序数值,默认初始值为1
int upnum = 1;
for (int j = i+1; j < dataArr.count; j++) {
//如果j位置的值,小于位置的值,就进行++ 操作
if (dataArr[i] <dataArr[j]) {
upnum ++;
}
}
//循环完成一次,就进行对比,保存最大值
res = MAX(res, upnum);
//如果当前最大值已经大于数组最大值和位置的差值,就不用再往后进行排序了
if (res > dataArr.count - i) {
break;
}
}
NSLog(@"%d",res);
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
/**
题目:给定一个无需的整数数组,找出其中最长的子序列长度
举例:
输入:[10,9,2,5,3,7,101,18]
输出: 4
解释:最长的上升子序列的组合,你只需要输出对应的长度即可[2,3,7,101]
说明:
可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。
*/
NSArray *arr = @[@10,@9,@2,@5,@3,@7,@101,@18];
CFAbsoluteTime StartTime = CFAbsoluteTimeGetCurrent();
bruteForce(arr);
CFAbsoluteTime EndTime = CFAbsoluteTimeGetCurrent();
NSLog(@"执行时间为:----%f",EndTime - StartTime);
}
return 0;
}
这个算法不是最优解,只是其中的一种解法,能够完成这个,刚刚开始,后续如果有更好的解法,会及时更新;大家可以一起讨论学习;
希望对大家有用处,欢迎大家点赞+评论,关注我的CSDN,我会定期做一些技术分享!未完待续。。。