непрерывно перемещая камень до leetcode 1040. II (скользящее окно)

Значение вопросов:

Длина бесконечного числа осей, положение 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 (крайний левый зазор, ультраправых недействительный); минимальное количество движений, скользящее окно может быть использовано, размер окна п есть длина участка, около начала п не увеличиваются до длины числа у, то число движений окна не в этом. Обратите внимание, что встречается непрерывное окно от внешних точек только тогда, когда двухстадийный процесс.

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 };
Просмотр кода

рекомендация

отwww.cnblogs.com/ljy08163268/p/11735512.html