Значение вопросов:
Длина бесконечного числа осей, положение I-й гравийных частиц камней [I]. Если места расположения камня минимум / максимум, то конечная точка называется камень гравий.
Каждый поворот, вы можете подобрать камень и переместите конечную точку в место незанятого, так что камень больше не является конечной камень.
Следует отметить , что, если камни как камни = [1,2,5] Таким образом, вы не будете иметь возможность перемещать камни конечной точки , расположенные в положении 5, так ли он будет перемещен в любое положение (например, 0 или 3), камни все еще является конечной точкой камни.
Если вы не можете сделать любое движение, то есть положение этих камней в ряд, игра заканчивается.
Для того, чтобы игра заканчивается, максимальное и минимальное количество ходов вы можете выполнить это сколько? Массив длиной 2 возвращается Ответ: ответ = [minimum_moves, maximum_moves] .
Пример 1:
Входные данные : [7,4,9]
Выход: [1,2]
Пояснение:
мы можем двигаться один, 4 -> 8, игра заканчивается.
Или мы можем двигаться в два раза 9 -> 5,4 -> 6, игра окончена.
Пример 2:
Входные данные : [6,5,4,3,10]
Выход: [2,3]
Пояснение:
мы можем двигаться 3 -> 8, а затем 10 -> 7, игра заканчивается.
В качестве альтернативы, можно переместить 3 -> 7, 4 -> 8, 5 -> 9, игра заканчивается.
Обратите внимание , что мы не можем быть 10 -> 2 таких движений , чтобы закончить игру, потому что она двигается нежелательно.
Пример 3:
Входной сигнал: [100.101.104.102.103]
Выход: [0,0]
Идеи:
Во-первых, чтобы уточнить конкретную операцию, по существу, число точек оси с минимальным количеством ходов в непрерывный период последовательности, из-за максимального количества ходов могут быть получены непосредственно: каждое движение снаружи внутрь являются все пустоты перемещаются один раз Это может быть началом самого левого в крайнее правое или крайнее правое зазора в крайнее левое положение, в зависимости от которых аннулирует самый длинный, так что число движется вверх: общая пустота -min (крайний левый зазор, ультраправых недействительный); минимальное количество движений, скользящее окно может быть использовано, размер окна п есть длина участка, около начала п не увеличиваются до длины числа у, то число движений окна не в этом. Обратите внимание, что встречается непрерывное окно от внешних точек только тогда, когда двухстадийный процесс.
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 класс Решение { 2 публичного : 3 вектор < INT > numMovesStonesII (вектор < INT > & камни) { 4 INT миль = 0x3f3f3f3f , та = 0 , п = stones.size (); 5 сортировки (stones.begin (), stones.end ()); 6 ма = камни [п- 1 ] -stones [ 0 ] -MIN (камни [п- 1 ] -stones [п- 2 ], камни [ 1 ] -stones [ 0 ]) - п + 2 ; 7 для ( INT I =0 , J = 0 ; <п; я ++ ) { 8 в то время как (камни [I] -stones [J] + 1 > п) j ++ ; 9 , если (Ij == камни [I] -stones [J] && н- (Ij + 1 ) == 1 ) мили = мин (ми, 2 ); 10 еще миль = мин (мили, н- (I-J + 1 )); 11 } 12 вектор < INT > v; 13 v.push_back (ми); v.push_back (ма); 14 возвращение v; 15 } 16 };