[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」
問題解決方法
- 最初にリストを使用して結果を配列の形式で格納します。arr[0]は開始を意味し、arr [1]は終了を意味します。arr[0] = arr [1] = nums [i]の格納を開始します。
- 前のarrを取り出します。arr[1] + 1 == nums [i]の場合、arr [1]をnums [i]に継続的に変更することを意味します。それ以外の場合、nums [i]はリストに格納されます。
- 最後に、リストを目的の結果に変換します
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%を上回っています