这个函数的时间复杂度是多少?

时间:2019-05-26 18:15:42

标签: javascript time-complexity big-o

此算法的时间复杂度是多少?

我知道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(' ');
}

1 个答案:

答案 0 :(得分:1)

  

此功能的时间复杂度是多少?

O( n )。

  

我说时间复杂度为0(n + m)是正确的,其中m是单词的长度。

否,因为 m 大致等于 n 。即使我们假设String.slice()的结果长度为O( n ),所切字母的总数也是 n 的一小部分,所以它已经考虑到了复杂性。实际上,这可能是恒定时间的操作。

(分析任何Javascript代码的时间复杂度有点模糊,因为该语言不能保证任何操作的时间复杂度,并且运行时能够进行一些非常强大的优化。)