ソート後の配列、隣接する要素間の最大の違いを見つけるために、障害の配列を考えます。
配列の要素数が2未満である場合、0が返されます。
例1:
入力:[3,6,9,1]
出力:3
説明:ソートされた配列は、[1,3,6,9]、隣接する要素(3,6)との間に存在する(6,9)であります3最大差。
例2:
入力:[10]
出力:0
説明:配列要素の数は、リターン0 2未満です。
説明:
すべての配列要素が非負整数、32ビット符号付き整数の範囲内の値であると仮定することができます。
この問題を解決する線形時間複雑さと空間の複雑さの条件で試してみてください。
ソートされていない配列を指定し、そのソートされた形で連続する要素間の最大の差を見つけます。
配列は、以下の2つの要素が含まれている場合は0を返します。
例1:
入力:[3,6,9,1] 出力:3 説明:配列のソートされた形のいずれか、[1,3,6,9]である (3,6)または(6,9)の最大差を有する3 。
例2:
入力:[10] 出力:0 説明:配列が2つの未満の要素が含まれ、したがって、0を返します。
注意:
- あなたは、アレイ内のすべての要素は、32ビット符号付き整数の範囲の非負整数と嵌合すると仮定してもよいです。
- 線形時間/空間でそれを解決するために試してみてください。
コードは以下の通りであります:
/ * * * @param {数[]} NUMS * @return {数} * / VAR maximumGap = 関数(NUMS){ // 法一 // IF(nums.length <2)戻り0; // ましょうARR = nums.sort((a、b)は=> AB); // 最大= 0ましょう。 // ための式(I = 1にしましょう。私は<arr.length; iは++){ // 最大= Math.max(最大、ARR [I] -arr [I-1])。 // } // 最大戻す // 法二:桶排序 場合(nums.length === 0)戻り 0 ; MXましょう = -Infinity、MN =インフィニティ、LEN = nums.length。 nums.forEach(項目 =>{ MX = Math.max(MX、項目)。 MN = Math.min(MN、項目)。 }); サイズせ =(MX-MN)/ LEN + 1。 せbucket_num =のparseInt((MX-MN)/サイズ)+1。 せbucket_min = []、bucket_max = []; ため(LET I = 0; I <bucket_num; iは++ ){ bucket_min.push(無限大)。 bucket_max.push( - インフィニティ)。 } sはせ = 新しい)(セット。 nums.forEach(項目 => { せIDX =のparseInt((項目-MN)/サイズ); [IDX = bucket_min = Math.min()[IDX]、項目bucket_min。 bucket_max [IDX] Math.max([IDX]、項目bucket_max)。 s.add(IDX)。 }); 聞かせて前 = 0、RESの= 0 ; 以下のために(;私がlen <; I = 1みましょう私は++ ){ 場合(s.has(I)!)続けます。 RES = Math.max(RES、bucket_min [I] - bucket_max [事前])。 前 = I; } 戻りRESと、 }。