Как перемешать массив символов без двух дубликатов рядом друг с другом? [Дубликат]
На этот вопрос уже есть ответ:
Эффективный алгоритм упорядочения объектов разных типов 5 ответовМне задали этот вопрос в интервью:
Как перемешать массив символов без двух дубликатов рядом друг с другом?
Алгоритм, который я придумал, был:
естьHashMap
символов, количество вхождений пар символов. С помощью этого найдите количество дубликатов против уникальных элементов. Если дубликат> уникален, не может сформировать перетасованный массив без двух дублирующих элементов рядом друг с другом (?)if unique> = duplicate, имеет 2 стека - 1, содержащий уникальные символы, и один, содержащий повторяющиеся символы. Создайте полученный массив таким образом, чтобы сначала извлекать элемент из уникального стека, а затем извлекать элемент из повторяющегося стека. ПовторениНапример
[a,b,b,c] shuffled array with above algorithm - [a,b,c,b];
[b,b,b,c] unique < duplicate return error
Но я почти уверен, что слишком усложняю логику. Есть ли более простой и надежный способ сделать это?