Re: Llama-3.2-3B-Q8 проходит интервью
От: BlackEric http://black-eric.lj.ru
Дата: 05.11.24 13:35
Оценка:
Здравствуйте, Артём, Вы писали:

Для переворота порядка следования слов в строке "in place" на C++, можно использовать алгоритм с двумя указателями, который имеет временную сложность
O(n) и пространственную сложность O(1). Этот подход позволяет изменять исходную строку без создания дополнительных копий.
Функция для переворота слов в строке
Вот пример реализации такой функции:

#include <iostream>
#include <string>
#include <algorithm>

void reverseWords(std::string& str) {
    // Шаг 1: Перевернуть всю строку
    std::reverse(str.begin(), str.end());

    // Шаг 2: Перевернуть каждое слово в строке
    size_t start = 0;
    for (size_t end = 0; end <= str.length(); ++end) {
        // Если достигнут конец слова или конец строки
        if (end == str.length() || str[end] == ' ') {
            std::reverse(str.begin() + start, str.begin() + end);
            start = end + 1; // Переход к следующему слову
        }
    }
}

int main() {
    std::string input = "Hello World from C++";
    reverseWords(input);
    std::cout << "Reversed words: " << input << std::endl;
    return 0;
}



Объяснение кода
Переворот всей строки: Сначала мы переворачиваем всю строку, чтобы слова оказались в обратном порядке.
Переворот каждого слова: Затем мы проходим по строке и переворачиваем каждое слово обратно, используя два указателя (start и end). Когда мы встречаем пробел или конец строки, это означает, что мы достигли конца слова.
Примечания
Использование std::reverse из заголовка <algorithm> позволяет эффективно переворачивать диапазон символов, что делает код простым и понятным125.
Временная сложность данного алгоритма составляет O(n), где n — длина строки, так как каждый символ обрабатывается не более двух раз.
Пространственная сложность составляет O(1), так как мы не используем дополнительные структуры данных для хранения результата.

https://github.com/BlackEric001
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.