Данный массив символов chars сжимает его, используя следующий алгоритм:
Сжатая строка s не должна возвращаться отдельно, а храниться во входном массиве символов chars. Обратите внимание, что длина группы, равная 10 или более, будет разбита на несколько символов в виде символов.
После завершения изменения входного массива верните новую длину массива.
Вы должны написать алгоритм, который использует только постоянное дополнительное пространство.
Чтобы решить эту проблему, нам нужно перебирать массив, отслеживая текущий символ и его количество. Когда мы встречаем новый символ, мы добавляем в массив текущий символ и его счетчик (если он больше 1). Нам необходимо убедиться, что мы делаем это на месте, чтобы удовлетворить требования к сложности пространства.
Решение методом перебора предполагает создание нового массива для хранения сжатой версии входного массива. Это не экономит пространство, но помогает нам понять необходимые шаги.
function compressBruteForce(chars: string[]): number { const n = chars.length; let compressed: string[] = []; let i = 0; while (i 1) { compressed.push(...count.toString().split('')); } } for (let j = 0; jАнализ временной сложности:
Решение методом грубой силы не эффективно использует пространство и не удовлетворяет ограничению использования только постоянного дополнительного пространства.
Оптимизированное решение предполагает изменение входного массива для хранения сжатой версии. Мы используем два указателя: один для чтения входного массива и один для записи сжатого вывода.
function compress(chars: string[]): number { let writeIndex = 0; let i = 0; while (i 1) { let countStr = count.toString(); for (let j = 0; jАнализ временной сложности:
console.log(compressBruteForce(["a","a","b","b","c","c","c"])); // 6, ["a","2","b","2","c","3"] console.log(compressBruteForce(["a"])); // 1, ["a"] console.log(compressBruteForce(["a","b","b","b","b","b","b","b","b","b","b","b","b"])); // 4, ["a","b","1","2"] console.log(compressBruteForce(["a","a","a","a","a","a","a","a","a","a"])); // 3, ["a","1","0"] console.log(compressBruteForce(["a","b","c"])); // 3, ["a","b","c"] console.log(compress(["a","a","b","b","c","c","c"])); // 6, ["a","2","b","2","c","3"] console.log(compress(["a"])); // 1, ["a"] console.log(compress(["a","b","b","b","b","b","b","b","b","b","b","b","b"])); // 4, ["a","b","1","2"] console.log(compress(["a","a","a","a","a","a","a","a","a","a"])); // 3, ["a","1","0"] console.log(compress(["a","b","c"])); // 3, ["a","b","c"]
Манипуляция строками:
Алгоритмы на месте:
Практикуя такие задачи и стратегии, вы сможете улучшить свои навыки решения проблем и лучше подготовиться к различным задачам кодирования.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3