From 467a2ee938f17cbc4282e322386f604f0c27b158 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BD=A9=E8=BE=95=E9=BE=99=E5=84=BF?= Date: Fri, 7 Apr 2023 15:40:42 +0800 Subject: [PATCH] =?UTF-8?q?1040:=E7=A7=BB=E5=8A=A8=E7=9F=B3=E5=AD=90?= =?UTF-8?q?=E7=9B=B4=E5=88=B0=E8=BF=9E=E7=BB=AD=20II?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/MovingStonesUntilConsecutiveIi.java | 90 +++++++++++++++++++ .../content/MovingStonesUntilConsecutiveIi.md | 52 +++++++++++ 2 files changed, 142 insertions(+) create mode 100644 src/main/java/leetcode/editor/cn/MovingStonesUntilConsecutiveIi.java create mode 100644 src/main/java/leetcode/editor/cn/doc/content/MovingStonesUntilConsecutiveIi.md diff --git a/src/main/java/leetcode/editor/cn/MovingStonesUntilConsecutiveIi.java b/src/main/java/leetcode/editor/cn/MovingStonesUntilConsecutiveIi.java new file mode 100644 index 0000000..47539b4 --- /dev/null +++ b/src/main/java/leetcode/editor/cn/MovingStonesUntilConsecutiveIi.java @@ -0,0 +1,90 @@ +//

在一个长度 无限 的数轴上,第 i 颗石子的位置为 stones[i]。如果一颗石子的位置最小/最大,那么该石子被称作 端点石子

+// +//

每个回合,你可以将一颗端点石子拿起并移动到一个未占用的位置,使得该石子不再是一颗端点石子。

+// +//

值得注意的是,如果石子像 stones = [1,2,5] 这样,你将 无法 移动位于位置 5 的端点石子,因为无论将它移动到任何位置(例如 0 或 3),该石子都仍然会是端点石子。

+// +//

当你无法进行任何移动时,即,这些石子的位置连续时,游戏结束。

+// +//

要使游戏结束,你可以执行的最小和最大移动次数分别是多少? 以长度为 2 的数组形式返回答案:answer = [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]
+// +//

 

+// +//

提示:

+// +// +// +//

 

+// +//
Related Topics
  • 数组
  • 数学
  • 双指针
  • 排序

  • 👍 165
  • 👎 0
  • +package leetcode.editor.cn; + +import java.util.Arrays; + +// 1040:移动石子直到连续 II +public class MovingStonesUntilConsecutiveIi { + public static void main(String[] args) { + Solution solution = new MovingStonesUntilConsecutiveIi().new Solution(); + // TO TEST + } + + //leetcode submit region begin(Prohibit modification and deletion) + class Solution { + public int[] numMovesStonesII(int[] stones) { + int size = stones.length; + Arrays.sort(stones); + if (stones[size - 1] - stones[0] + 1 == size) { + return new int[]{0, 0}; + } + int max = Math.max(stones[size - 2] - stones[0] + 1, stones[size - 1] - stones[1] + 1) - (size - 1); + int min = size; + for (int i = 0; i < size; ++i) { + int j = 0; + while (j + 1 < size && stones[j + 1] - stones[i] + 1 <= size) { + j++; + } + if (j - i + 1 == size - 1 && stones[j] - stones[i] + 1 == size - 1) { + min = Math.min(min, 2); + } else { + min = Math.min(min, size - (j - i + 1)); + } + } + return new int[]{min, max}; + } + } +//leetcode submit region end(Prohibit modification and deletion) + +} diff --git a/src/main/java/leetcode/editor/cn/doc/content/MovingStonesUntilConsecutiveIi.md b/src/main/java/leetcode/editor/cn/doc/content/MovingStonesUntilConsecutiveIi.md new file mode 100644 index 0000000..d8b865c --- /dev/null +++ b/src/main/java/leetcode/editor/cn/doc/content/MovingStonesUntilConsecutiveIi.md @@ -0,0 +1,52 @@ +

    在一个长度 无限 的数轴上,第 i 颗石子的位置为 stones[i]。如果一颗石子的位置最小/最大,那么该石子被称作 端点石子

    + +

    每个回合,你可以将一颗端点石子拿起并移动到一个未占用的位置,使得该石子不再是一颗端点石子。

    + +

    值得注意的是,如果石子像 stones = [1,2,5] 这样,你将 无法 移动位于位置 5 的端点石子,因为无论将它移动到任何位置(例如 0 或 3),该石子都仍然会是端点石子。

    + +

    当你无法进行任何移动时,即,这些石子的位置连续时,游戏结束。

    + +

    要使游戏结束,你可以执行的最小和最大移动次数分别是多少? 以长度为 2 的数组形式返回答案:answer = [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]
    + +

     

    + +

    提示:

    + + + +

     

    + +
    Related Topics
  • 数组
  • 数学
  • 双指针
  • 排序

  • 👍 165
  • 👎 0
  • \ No newline at end of file