标签:sz -- 复杂度 Example int sum 字符串 leetcode
时间复杂度
cookbook上的几个特殊例子分析
Example 1
void hello (int n){
for( int sz = 1 ; sz < n ; sz += sz)
for( int i = 1 ; i < n ; i ++)
cout << "Hello" << endl;
}
第一个循环的条件是”sz+=sz",相当于递归,区间段长度为sz。
时间复杂度为:O(nlogn)
Example 2
bool isPrime (int n){
for( int x = 2 ; x * x <= n ; x ++ )
if( n % x == 0)
return false;
return true;
}
循环条件相当于x*2=n。
时间复杂度为:O(sqrt(n))
例1和例2说明,判断时间复杂度需要具体看循环条件是什么,而不能直接看循环结构。
Example 3
有一个字符串数组,将数组中的每一个字符串按照字母序排序,之后再将整个字符串数组按照字典序排序。两步操作的整体时间复杂度是多少呢?
1. 对每一个字符串排序时,一般用快排、归并等算法排。假设字符串最长为s,则该步骤的时间复杂度为:O(slogs)。
2. 对字符串组排序时,也一般用快排、归并等算法排。假设数组长度为n,则该步骤的时间复杂度为:O(nlogn)。
总的时间复杂度为:O(nslog(s+n)
空间复杂度
Example 1
int sum( int n ){
assert( n >= 0 )
int ret = 0;
for ( int i = 0 ; i <= n ; i++)
ret += i;
return ret;
}
空间复杂度为:O(1)
Example 2
int sum( int n ){
assert( n >= 0 )
if ( n == 0 )
return 0;
return n + sum( n - 1);
}
递归调用sum函数,相当于n+n-1+n-2+n-3+....+1。
空间复杂度为:O(n)
递归的时间复杂度
主定理、递归树、假设验证法
标签:sz,--,复杂度,Example,int,sum,字符串,leetcode 来源: https://blog.csdn.net/qq_30869745/article/details/121802894
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。