#javascript #arrays #data-structures
#javascript #массивы #структуры данных
Вопрос:
В настоящее время я изучаю структуры данных и алгоритмы. Я хочу знать, как вычислить сложность пространства и Big O функции. Я написал программу, которая поддерживает первый алфавит каждого индекса массива. Пожалуйста, предложите мне лучший способ сделать это.
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 resu<
}
console.log(capitalizeFirst(['banana', 'orange', 'mango']));
// ['banana', 'orange', 'mango']
// ['Banana', 'Orange', 'Mango']
Комментарии:
1. Я думаю, что у этого есть O (1), поскольку он никогда не зацикливается и обращается только к первому элементу.
2. @evolutionxbox за исключением того, что он рекурсивен по всему массиву. Thereofre должно быть
O(n)
(я думаю!)3. @Jamiec хорошее место. Я не заметил вызова после нажатия результата.
4. Это O (n), поскольку оно касается каждого элемента и каждого элемента только один раз. И операция для каждого элемента равна O (1), поэтому в целом требуется O (n)
5. Я понял суть. Большое спасибо @evolutionxbox
Ответ №1:
Существует несколько способов решения этого вопроса. Вы можете использовать функцию со стрелкой или функцию 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/
Комментарии:
1. Большое спасибо :). Я пытаюсь стать лучше в программировании.
2. Возможно, вы правы в отношении сложности пространства (я не уверен, TBH), но обычно нас интересует временная сложность.
3. @Jamiec Вы правы. В большинстве случаев учитывается временная сложность. В качестве вопроса, специально заданного для сложности пространства для функции, я выделил только это. Временная сложность для этого будет O (n).
Ответ №2:
Ваш метод работает, но для вычисления 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', 'orange', 'mango']
// ['Banana', 'Orange', 'Mango']
Конечно, есть много способов написать вышеупомянутое, но простой цикл с 2 простыми строковыми методами, вероятно, самый простой. Из этого примера ясно, что это O(n)
для цикла плюс O(1)
для каждой строковой операции — результат остается O(n)
неизменным .
Комментарии:
1. Большое спасибо 🙂 Я пытаюсь стать лучше в программировании.