Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

JavaScriptで配列を連続したサブシーケンスに分割できます


問題

最初で唯一の引数として、ソートされた整数の配列arrを受け取るJavaScript関数を作成する必要があります。

配列を1つ以上のサブシーケンスに分割して、各サブシーケンスが連続する整数で構成され、長さが3以上になる場合にのみ、関数はtrueを返す必要があります。それ以外の場合はfalseです。

たとえば、関数への入力が

入力

const arr = [1, 2, 3, 3, 4, 5];

出力

const output = true;

出力の説明

それらを2つの連続したサブシーケンスに分割できます-

1, 2, 3
3, 4, 5

以下はコードです-

const arr = [1, 2, 3, 3, 4, 5];
const canSplit = (arr = []) => {
   const count = arr.reduce((acc, num) => {
      acc[num] = (acc[num] || 0) + 1
      return acc
   }, {})
   const needed = {}
   for (const num of arr) {
      if (count[num] <= 0) {
         continue
      }
      count[num] -= 1
      if (needed[num] > 0) {
         needed[num] -= 1
         needed[num + 1] = (needed[num + 1] || 0) + 1
      } else if (count[num + 1] > 0 && count[num + 2]) {
         count[num + 1] -= 1
         count[num + 2] -= 1
         needed[num + 3] = (needed[num + 3] || 0) + 1
      } else {
         return false
      }
   }
   return true
}
console.log(canSplit(arr));

出力

true

  1. JavaScriptで配列を合計が等しいn個のパーティションに分割できます

    最初の引数として数値の配列arrを取り、2番目の引数として数値numを受け取るJavaScript関数を作成する必要があります。 関数は、すべてのグループの合計が等しくなるように、配列arrの要素をnumグループに分散する方法が存在するかどうかを判断する必要があります。そのような方法が存在する場合、関数はtrueを返し、そうでない場合はfalseを返す必要があります。 例- 入力配列と数値が-の場合 const arr = [4, 6, 3, 3, 7, 4, 1]; const num = 4; その場合、出力は-になります。 const output = true; [7]、[1

  2. C++で配列を連続するサブシーケンスに分割する

    昇順で並べ替えられた配列numがあるとします。各サブシーケンスが連続する整数で構成され、長さが少なくとも3になるように、1つ以上のサブシーケンスに分割できる場合にのみ、trueを返す必要があります。したがって、入力が[1,2,3,3,4、 4,5,5]の場合、2つの連続したシーケンスがあるため、出力はTrueになります。これらは[1,2,3,4,5]と[3,4,5]です。 これを解決するには、次の手順に従います- マップmを作成し、numsの頻度をmに格納し、numsのサイズをmに格納します cnt:=n 0からn–1の範囲のiの場合 x:=nums [i] m[x]およびm[x+