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

各要素がその前後の要素の数を示す順列?


このセクションでは、1つの問題が発生します。ここでは、n個の要素が配列で指定されています。各要素がその前後に存在する要素の数を示すように、その配列の順列が存在するかどうかを確認する必要があります。

配列要素が{2、1、3、3}であると仮定します。適切な順列は{3、1、2、3}のようなものです。ここで、最初の3は、その隣に3つの要素があることを示し、1は、この前に1つの要素しかないことを示します。 2は、その前に2つの要素があることを示し、最後の3つは、その前に3つの要素があることを示します。

アルゴリズム

checkPermutation(arr、n)

begin
   define a hashmap to hold frequencies. The key and value are of integer type of the map.
   for each element e in arr, do
      increase map[e] by 1
   done
   for i := 0 to n-1, do
      if map[i] is non-zero, then
         decrease map[i] by 1
      else if map[n-i-1] is non-zero, then
         decrease map[n-i-1] by 1
      else
         return false
      end if
   done
   return true
end

#include<iostream>
#include<map>
using namespace std;
bool checkPermutation(int arr[], int n) {
   map<int, int> freq_map;
   for(int i = 0; i < n; i++){ //get the frequency of each number
      freq_map[arr[i]]++;
   }
   for(int i = 0; i < n; i++){
      if(freq_map[i]){ //count number of elements before current element
         freq_map[i]--;
      } else if(freq_map[n-i-1]){ //count number of elements after current element
         freq_map[n-i-1]--;
      } else {
         return false;
      }
   }
   return true;
}
main() {
   int data[] = {3, 2, 3, 1};
   int n = sizeof(data)/sizeof(data[0]);
   if(checkPermutation(data, n)){
      cout << "Permutation is present";
   } else {
      cout << "Permutation is not present";
   }
}

出力

Permutation is present

  1. Pythonのサブリストとして各番号の出現を追加します

    要素が数値であるリストがあります。多くの要素が複数回存在します。サブリストを作成して、各要素の頻度と要素自体を作成します。 forとappendを使用 このアプローチでは、リスト内の各要素をその後の他のすべての要素と比較します。一致する場合は、カウントがインクリメントされ、要素とカウントの両方が存続します。すべての要素とその頻度を示す存在を含むリストが作成されます。 例 def occurrences(list_in):    for i in range(0, len(listA)):       a = 0     &

  2. Redis LINSERT –前にリストに要素を挿入する方法|ピボット要素の後

    このチュートリアルでは、keyに格納されているリスト値のピボット要素の周りに新しい要素を挿入する方法について学習します。このために、Redis LINSERTを使用します コマンド。 LINSERTコマンド このコマンドは、特定の要素(ピボット)の前または後に、指定されたキーに格納されているリスト値に新しい要素を挿入します。空のリストとして解釈されるため、キーが存在しない場合は0を返し、キーは存在するがピボット要素がリストに存在しない場合は-1を返します。 redis LINSERTコマンドの構文は次のとおりです:- 構文:- redis host:post> LINSERT