|
|
|||||
[+1 15.11.10]
Регистрация: Jun 2005
Сообщений: 25
|
Array. Перемешивание массива
Приветствую, мега-мной-уважаемые!
Пытаюсь решить одну проблемку. Но что-то никак не придет в голову изящное решение. Задача приходит массив [x,x,x,y,y,y,y,y,y,z,z] нужно его перемешать так, чтобы ни один элемент не стоял рядом с таким же то есть x,y,z,y,x,y... - допустимо x,y,y... - не допустимо Вроде тривиальная задача.. но вот закавыка.. Всем спасибо! |
|
|||||
[+1 15.11.10]
Регистрация: Jun 2005
Сообщений: 25
|
Цитата:
интересно, утверждение: "сумма повторений любого элемента меньше половины длинны массива" может считаться признаком того, что задача может быть выполнена? что касается самой задачи. что-то мне подсказывает, что нужно несколько модифицировать метод пузырька |
|
|||||
[+1 15.11.10]
Регистрация: Jun 2005
Сообщений: 25
|
ну.. я бы даже сказал точнее - в зависимости от длины массива
если длина четная - то не более ровно половины если нет - то допустимо половина + 1 вроде так если смотреть "на пальцах" то [x,x,x,y,y,y] -> [x,y,x,y,x,y] а вот [x,x,x,x,y,y,] -> уже никак зато [x,x,x,x,y,y,y] -> [x,y,x,y,x,y,x] |
|
|||||
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
|
Попробуйте так:
var a:Array = [0,2,0,0,0,1,1,1,0,2,0,2,0,2,0,1,0,1,1,2,1,2,1,2,0,1,2,1,0,1]; function smartSort(array:Array):Array { var array:Array = array.concat().sort(); var elements:Array = []; var elementsLengths:Array = []; var totalRendomElements:int = 0; var k:int; for (k = 0; k < a.length; k ++) { var el:* = array[k]; var index:int = elements.indexOf(el); if (index == -1) { totalRendomElements++; elements.push(el); index = elements.length - 1; elementsLengths[index] = 0; } elementsLengths[index]++; } var maxGroupLength:int = elementsLengths.concat().sort()[0]; var newArray:Array = []; for (k = 0; k < maxGroupLength; k ++) { for (var j:int = 0; j < totalRendomElements; j ++) { elementsLengths[j]--; if (elementsLengths[j] >= 0) { newArray.push(elements[j]); } } } return newArray; } trace(a) trace(smartSort(a))
__________________
hauts.ru |
|
|||||
Цитата:
|
|
|||||
[+1 15.11.10]
Регистрация: Jun 2005
Сообщений: 25
|
и что характерно - работает!
Гениально! Hauts, браво! премного благодарен! |
Часовой пояс GMT +4, время: 15:23. |
|
« Предыдущая тема | Следующая тема » |
Теги |
array , sort |
|
|