[LeetCode] 228.要約範囲(簡単)(JAVA)1日1つの質問

[LeetCode] 228.要約範囲(簡単)(JAVA)

件名アドレス:https//leetcode.com/problems/summary-ranges/

タイトル説明:

ソートされた一意の整数配列numsが与えられます。

配列内のすべての数値を正確にカバーする範囲の最小のソート済みリストを返します。つまり、numsの各要素は、正確に1つの範囲でカバーされ、xが範囲の1つに含まれるが、numsには含まれないような整数xはありません。

リスト内の各範囲[a、b]は、次のように出力する必要があります。

  • a!= bの場合は「a-> b」
  • a == bの場合は「a」

例1:

Input: nums = [0,1,2,4,5,7]
Output: ["0->2","4->5","7"]
Explanation: The ranges are:
[0,2] --> "0->2"
[4,5] --> "4->5"
[7,7] --> "7"

例2:

Input: nums = [0,2,3,4,6,8,9]
Output: ["0","2->4","6","8->9"]
Explanation: The ranges are:
[0,0] --> "0"
[2,4] --> "2->4"
[6,6] --> "6"
[8,9] --> "8->9"
Example 3:

Input: nums = []
Output: []

例4:

Input: nums = [-1]
Output: ["-1"]

例5:

Input: nums = [0]
Output: ["0"]

制約:

  • 0 <= nums.length <= 20
  • -2 ^ 31 <= nums [i] <= 2 ^ 31-1
  • numsの値はすべて一意です。
  • numsは昇順で並べ替えられます。

一般的なアイデア

繰り返される要素のない順序付けられた整数配列numsが与えられます。

配列内のすべての数値をカバーする最小の順序付き範囲範囲のリストを返します。言い換えれば、numsの各要素は特定の範囲で正確にカバーされており、特定の範囲に属しているがnumsに属していない数xはありません。

リスト内の各間隔範囲[a、b]は、次の形式で出力する必要があります。

  • 「A-> b」、a!= bの場合
  • a == bの場合は「A」

問題解決方法

  1. 最初にリストを使用して結果を配列の形式で格納します。arr[0]は開始を意味し、arr [1]は終了を意味します。arr[0] = arr [1] = nums [i]の格納を開始します。
  2. 前のarrを取り出します。arr[1] + 1 == nums [i]の場合、arr [1]をnums [i]に継続的に変更することを意味します。それ以外の場合、nums [i]はリストに格納されます。
  3. 最後に、リストを目的の結果に変換します
class Solution {
    public List<String> summaryRanges(int[] nums) {
        List<int[]> list = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) {
            if (list.size() == 0 || list.get(list.size() - 1)[1] != nums[i] - 1) {
                list.add(new int[]{nums[i], nums[i]});
            } else {
                list.get(list.size() - 1)[1] = nums[i];
            }
        }
        List<String> res = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            int[] temp = list.get(i);
            if (temp[0] == temp[1]) {
                res.add(temp[0] + "");
            } else {
                res.add(temp[0] + "->" + temp[1]);
            }
        }
        return res;
    }
}

実行時間:8ミリ秒、Javaユーザーの70.02%を上回っています
メモリ消費量:37.1 MB、Javaユーザーの19.48%を上回っています

私の公式アカウントに注意を払うことを歓迎します、LeetCodeは毎日1つの質問を更新します

おすすめ

転載: blog.csdn.net/qq_16927853/article/details/112425151