[Leet Code] Number of Subarrays with Bounded Maximum
こんにちは!今日、6月の3週目に3番目のアルゴリズムNumber of Subarrays with Bounded Maximumプールを作成します.
サマリ
与えられた
二重forゲートの巡回では,部分配列を求める方法を思いついた.
しかし,有効部分配列の条件は
部分配列の第1の要素が必ずしも
依然として2重forゲートを使用します.
1番目に入力された要素が
次に、2番目のfor文を巡回して、部分配列を求めます.
結果は受け入れる!
次はコードの説明です.
現在の
これは、
今日も.私は問題を理解しないで盲目的にアルゴリズムを解くことに気づいた.
この欠点は直す必要があるが、性格がせっかちなのは問題ではないか、直せない.うううううう
とにかく.今回の位置付けを読んでいただき、ありがとうございました:)
質問する
サマリ
与えられた
nums
配列において、部分配列のmax
値がleft <= max <= right
である部分配列の個数を求めて戻される.初志
二重forゲートの巡回では,部分配列を求める方法を思いついた.
nums
アレイにおいて、入力された値がleft <= nums[i] <= right
である場合、部分的なアレイが得られる.しかし,有効部分配列の条件は
max
値であることを無視した.部分配列の第1の要素が必ずしも
left
とright
の間の値ではないとしても、max
の値はleft
とright
の間の値にすぎない.第二の考え方
依然として2重forゲートを使用します.
nums
配列の値がright
より大きい場合にのみ、continue
が処理されます.1番目に入力された要素が
left
とright
の間にある場合、result
を1に加算することができる.次に、2番目のfor文を巡回して、部分配列を求めます.
結果は受け入れる!
次はコードの説明です.
コードの説明
int result = 0;
結果を返すresult
変数を0に初期化します.for (int i = 0; i < nums.length; i++) {
if (nums[i] > right) continue;
else if (nums[i] <= right && nums[i] >= left) result++;
// ...
}
前門を巡回します.nums[i]
がright
より大きい場合、部分配列は作成できないため、continue
を処理する必要がある.nums[i]
がleft
とright
の間の値であれば、それ自体も部分的に配列されているので、result
1を加えます.for (int i = 0; i < nums.length; i++) {
// ...
int max = nums[i];
// ...
}
その後、max
をnums[i]
に設定し、2番目のfor文を巡回する.for (int i = 0; i < nums.length; i++) {
// ...
for (int j = i + 1; j < nums.length; j++) {
if (nums[j] > right) break;
if (max < nums[j]) max = nums[j];
if (max <= right && max >= left) result++;
}
}
2番目のfor文は、i
の次のインデックスから順次チェックされます.nums[j]
がright
より大きい場合、break
を設定してfor文を終了します.これ以降は部分的な配列が成立しないためです.nums[j]
がright
を超えない場合は、max
を変更します.現在の
max
がmax
とleft
の間にある場合、right
は加算される.これは、
result
がmax
未満であるためである.完全なコード
class Solution {
public int numSubarrayBoundedMax(int[] nums, int left, int right) {
int result = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] > right) continue;
else if (nums[i] <= right && nums[i] >= left) result++;
int max = nums[i];
for (int j = i + 1; j < nums.length; j++) {
if (nums[j] > right) break;
if (max < nums[j]) max = nums[j];
if (max <= right && max >= left) result++;
}
}
return result;
}
}
の最後の部分
今日も.私は問題を理解しないで盲目的にアルゴリズムを解くことに気づいた.
この欠点は直す必要があるが、性格がせっかちなのは問題ではないか、直せない.うううううう
とにかく.今回の位置付けを読んでいただき、ありがとうございました:)
Reference
この問題について([Leet Code] Number of Subarrays with Bounded Maximum), 我々は、より多くの情報をここで見つけました https://velog.io/@khyunjiee/Leet-Code-Number-of-Subarrays-with-Bounded-Maximumテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol