微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

什么是功能的大O

如何解决什么是功能的大O

当前,我正在学习数据结构和算法。我想知道如何计算空间复杂度和函数的BigO。我编写了一个程序,该程序可以对数组的每个索引的第一个字母进行处理。请给我建议更好的方法

function capitalizefirst(arr){
    let result = [];
    function helper(array) {
        if (array.length === 0) return;
        let upperCassed = array[0][0].toupperCase();
        array[0].split(array[0][0])
        array[0] = array[0].split(array[0][0])
        array[0][0] = upperCassed
        result.push(array[0].join(''));
        helper(array.splice(1));
    }


    helper(arr);
    return result;
}
console.log(capitalizefirst(['banana','orange','mango']));

// ['banana','mango']
// ['Banana','Orange','Mango']

解决方法

有多种方法可以解决此问题。您可以使用箭头功能或javascript功能。以下是一种可能的解决方案:

function capitalizeFirstLetter(strArr) {
  strArr.forEach(function (item,index) {
   console.log(item.charAt(0).toUpperCase() + item.slice(1));
  });
}

capitalizeFirstLetter(['banana','mango']); 

关于空间复杂度,它是算法所需的最大存储空间,在这种情况下,我们没有使用任何额外的空间。因此它是O(1)。

有关时间和空间复杂性的更多详细信息,请参阅:https://www.hackerearth.com/practice/basic-programming/complexity-analysis/time-and-space-complexity/tutorial/

,

您的方法有效,但出于计算Big O的目的,我认为它相当复杂。它倾向于隐藏这样的事实,即它仅循环遍历一次数组,这会使它O(n)

一种更简单的方法就是完全按照要求进行操作,只有这样-循环使用大写字符串的第一个字符的数组

function capitalizeFirst(arr){
    for(var i=0;i<arr.length;i++){
      arr[i] = arr[i][0].toUpperCase() + arr[i].substring(1);
    }
    return arr;
}
console.log(capitalizeFirst(['banana','orange','mango']));

// ['banana','mango']
// ['Banana','Orange','Mango']

当然,有许多方法可以编写上面的代码,但是使用2个简单的字符串方法的简单循环可能是最简单的方法。从此示例可以明显看出,循环为O(n),每个字符串操作为O(1)-结果仍然为O(n)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。