此算法的时间复杂度是多少?
我知道array.map具有O(n),其中n是数组的长度。我还读过string.slice()的时间复杂度也为O(n)。但是,由于slice取决于单词的长度,所以我可以说时间复杂度为0(n + m),其中m是单词的长度。
function sentenceCaps(str) {
if (!str) {
return new Error('empty string');
}
let arr = str.toLowerCase().split(' ');
let results = arr.map(word => {return word[0].toUpperCase()+ word.slice(1)});
return results.join(' ');
}
答案 0 :(得分:1)
此功能的时间复杂度是多少?
O( n )。
我说时间复杂度为0(n + m)是正确的,其中m是单词的长度。
否,因为 m 大致等于 n 。即使我们假设String.slice()
的结果长度为O( n ),所切字母的总数也是 n 的一小部分,所以它已经考虑到了复杂性。实际上,这可能是恒定时间的操作。
(分析任何Javascript代码的时间复杂度有点模糊,因为该语言不能保证任何操作的时间复杂度,并且运行时能够进行一些非常强大的优化。)