Длина бесконечного числа осей, положение 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]
Советы:
3 <= stones.length <= 10^4
1 <= stones[i] <= 10^9
stones[i] 的值各不相同。
анализ
Наиболее мобильный номер:
В работе [7,4,9] в качестве примера, число строк в зависимости от размера вала
4, ,, 7, _, 9
теперь может быть перемещен только 4, 9, и положение движения границы не может быть проанализировано:
1 , чтобы переместить дальний (самый левый слот), должно быть перемещено в положение , от 5 до 9, так как до 4-7 середины щели, прорезь 9 перемещается мимо середины наиболее возможного количества подвижных вверх ,
2, слот 9 перемещается влево, из зазора между 7-9 не будет никакого эффекта, потому что мобильные камни, не может двигаться к границе
3, окончательное движение полного формирования непрерывной последовательности чисел, означает , что любой разрыв означает , что когда - то перенесенного
резюме, наибольшее количество ходов: общее количество пустот -min (ничтожной левого и правого зазора)
код
public int[] numMovesStonesII(int[] stones) {
Arrays.sort(stones);
int i = 0, n = stones.length;
int minnerSpace = Math.min(stones[n - 1] - stones[n - 2] - 1, stones[1] - stones[0] - 1);
int maxMove = (stones[n - 1] - stones[0] - n + 1) - minnerSpace;
int minMove = stones.length;
for (int j = 0; j < n; j++) {
while (stones[j] - stones[i] + 1 > n)
i++;
if (j - i == stones[j] - stones[i] && n - (j - i + 1) == 1)
minMove = Math.min(2, minMove);
else
minMove = Math.min(minMove, n - (j - i + 1));
}
return new int[]{minMove, maxMove};
}