如何解决什么是功能的大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 举报,一经查实,本站将立刻删除。