[1040] LeetCode непрерывное движение до каменной 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]

Советы:

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};
    }
Опубликовано 55 оригинальные статьи · вона похвала 14 · просмотров 20000 +

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

отblog.csdn.net/qq422243639/article/details/98629945