更新なしの範囲合計クエリ用のC++プログラム?
インデックスiからインデックスjまでの要素の合計を計算する必要があります。 iとjのインデックス値で構成されるクエリは複数回実行されます。
Input:arr[] = {5, 6, 3, 4, 1 } i = 1, j =3 Output: 13
説明
6 + 3 + 4 = 13 sum[] = {5, 6+5, 3+6+5, 4+3+6+5, 1+4+3+6+5 } sum[]={5,11,14,18,19} sum[j]-sum[i-1]=sum[3]-sum[1-1]= sum[3]-sum[0]=18-5=13
このロジックは、iインデックスからjインデックスまでのループを開始し、それらのインデックス間の要素を合計するという非常に基本的なものです。ただし、それらを追加の変数に格納することはできないため、最後の配列要素とともに配列要素を追加する別の配列を使用します。次に、jインデックスからi-1インデックス値を減算します;
例
#include <iostream> using namespace std; int rangeSum(int i, int j, int sum[]) { if (i == 0) return sum[j]; return sum[j] - sum[i - 1]; } int main() { int arr[] = { 5, 6, 3, 4, 1 }; int n=5; int sum[5]; sum[0] = arr[0]; for (int i = 1; i < n; i++) { sum[i] = arr[i] + sum[i - 1]; } cout << rangeSum(1, 3, sum) << endl; return 0; }
出力
13
-
鳩の巣ソート用のC++プログラム?
鳩の巣ソートは、非比較ソート手法の例です。アイテムの数と可能なキー値の範囲がほぼ同じである場合に使用されます。 このようなことを行うには、いくつかの穴を開ける必要があります。必要な穴の数は、数の範囲によって決まります。各穴にアイテムが挿入されます。最後に穴から削除され、並べ替えられた順序で配列に格納されます。 鳩の巣ソートは、カウントソートとも呼ばれ、要素の数(n)と可能なキー値の数(N)がほぼ同じである要素のリストをソートするのに適したソートアルゴリズムです。[1] O(n + N)時間が必要です。 Input: arr[]={7,4,2,6,3,1,5} Output: 1 2 3 4
-
更新なしの範囲合計クエリ用のC++プログラム?
ここでは、配列内のインデックスiからインデックスjまでの要素の合計を取得する方法を説明します。これは基本的に範囲クエリです。インデックスiからjまで1つのループを実行し、合計を計算するだけで、タスクは簡単です。ただし、この種の範囲クエリが複数回実行されることに注意する必要があります。したがって、上記の方法を使用すると、かなりの時間がかかります。より効率的な方法を使用してこの問題を解決するには、最初に累積合計を取得し、次に範囲合計を一定時間で見つけることができます。アイデアを得るためのアルゴリズムを見てみましょう。 アルゴリズム rangeSum(arr、i、j) begin &