Это бонусная школьная задача, для которой мы еще не получили никакого обучения, и я не ищу полный код, но некоторые советы, которые нужно сделать, будут довольно крутыми. Переходя к тому, что я сделал до сих пор на Java, когда я возвращаюсь домой, но здесь уже что-то сделал.
Итак, нам нужно выполнить алгоритм сортировки, который, например, сортирует "AAABBB" в ABABAB. Максимальный размер ввода - 10 ^ 6, и все это должно произойти менее 1 секунды. Если есть более одного ответа, первый в алфавитном порядке является правильным. Я начал тестировать различные алгоритмы, чтобы даже сортировать их без учета этого требования в алфавитном порядке, просто чтобы понять, как все сложилось.
Первая версия:
Сохраните коды ascii в массив Integer, где index - это код ascii, а значение - это количество, которое этот символ встречается в массиве char. Затем я выбрал 2 наивысших числа и начал рассылать их в новый массив символов после друг друга, пока какое-то число не было выше, и я поменялся на него. Он работал хорошо, но, конечно, порядок был неправильным.
Вторая версия:
Следуя той же идее, но перестала выбирать самое встречное число и просто выбрала индексы в том порядке, в котором они были в моем массиве. Хорошо работает, пока вход не будет похож на CBAYYY. Алгоритм сортирует его с ABCYYY вместо AYBYCY. Конечно, я мог бы попытаться найти некоторые свободные пятна для этих Y, но в этот момент он начинает занять слишком много времени.