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

C++で絶対差がKを超えない配列の最大要素をカウントします


たとえば、任意のサイズの整数要素と正の整数kの配列が与えられます。タスクは、絶対差が指定された整数kを超えない要素ペアの数を計算することです。

>

配列は、同じタイプの要素の固定サイズの順次コレクションを格納できる一種のデータ構造です。配列はデータのコレクションを格納するために使用されますが、配列を同じタイプの変数のコレクションと考える方が便利な場合がよくあります。

Input − int arr[] = {2, 3, 6, 12, 14}, k= 5
Output − count is : 3

説明 −最大絶対差がk以下のペア、つまりこの例では5であるように形成されたペアは、(2、3)、(2、6)、(3,6)、つまり{2、3、6}であるため、カウントは3です。

Input − int arr[] = {2, 3, 6, 12, 14}, k= 10
Output − count is : 4

説明 −最大絶対差がk以下のペア、つまりこの例では10のペアは、(2、3)、(2、6)、(3,6)、(2、12)、(3、12)です。 )、(6、12)、つまり{2、3、6、12}したがって、最大要素は4であるため、カウントは4です。

Input − int arr[] = {2, 3, 6, 12, 14}, k= 0
Output − count is : 0

説明 −差が0のペアがないため、カウントは0です。

以下のプログラムで使用されているアプローチは次のとおりです

  • たとえば、arr[]と正の整数k

    の配列を作成します。
  • 配列内の要素ごとに整数値を返すlength()関数を使用して、配列の長さを計算します。

  • 要素の数を格納する一時変数を取ります。

  • たとえば、最初と最後の2つの一時変数を宣言し、0で初期化します

  • sortメソッドを呼び出して配列をソートし、配列と配列のサイズを引数として関数に渡します。

  • iを0に設定し、iが配列のサイズよりも小さい場合にループを開始します

  • ループ内で、j の間に開始します

  • while内で、IF count

  • カウントを返す

  • 結果を印刷します。

#include <iostream>
#include <algorithm>
using namespace std;
int countmax(int arr[], int size, int K){
   int result = 0;
   int i = 0, j = 0;
   int beg = 0;
   int end = 0;
   // Sort the array
   sort(arr, arr + size);
   // Find max elements
   for (i = 0; i < size; i++) {
      // Count all elements which are in the range
      while (j < size && arr[j] <= arr[i] + K)
      j++;
      if (result < (j - i)) {
         result = (j - i);
         beg = i;
         end = j;
      }
   }
   // Return the max count
   return result;
}
// main function
int main(){
   int arr[] = { 2, 3, 6, 12, 14 };
   int size = sizeof(arr) / sizeof(arr[0]);
   int K = 5;
   cout <<"count is "<<countmax(arr, size, K) << endl;
   return 0;
}

出力

上記のコードを実行すると、次の出力が得られます-

count is 3

  1. Xとの絶対差がC++で最大値を与えるノードを見つけます

    ツリーがあり、すべてのノードの重みと整数xがあるとします。 | weight [i]--x|となるようなノードiを見つける必要があります。最小です。グラフが以下のようで、x =15 出力は3になります。ノードごとに次のようになります ノード1、| 5 – 15 | =10 ノード2、| 10 – 15 | =5 ノード3、| 11 – 15 | =4 ノード4、| 8 – 15 | =7 ノード5、| 6 – 15 | =9 アイデアは単純です。ツリーでDFSを実行し、ノードの追跡を行います。ノードのxとの重み付き絶対差が最小値を示します 例 #include

  2. 配列内のすべてのペアワイズ連続要素の絶対差(C ++)?

    この問題では、配列内の要素の各ペアの要素間の絶対差を取得する方法を確認します。 n個の要素がある場合、結果の配列にはn-1個の要素が含まれます。要素が{8、5、4、3}であると仮定します。結果は|8-5|になります=3、次に| 5-4 | =1、| 4-3 |=1。 アルゴリズム pairDiff(arr、n) begin    res := an array to hold results    for i in range 0 to n-2, do       res[i] := |res[i] – res