C++で整数配列の中央値を見つけるプログラム
-
データ構造に値を追加するadd(value)。
-
median()は、データ構造に現在存在するすべての数値の中央値を検索します。
したがって、5、3、8を追加して中央値を見つけると、出力は5.0になり、9を追加して中央値を見つけると、出力は6.5になります。
これを解決するには、次の手順に従います-
-
優先キューを左右に定義する
-
addNumメソッドを定義します。これは数値を入力として受け取ります-
-
leftが空の場合、またはnum
-
numを左に挿入
-
-
それ以外の場合
-
右にnumを挿入
-
-
左のサイズ<右のサイズの場合
-
temp:=右の一番上の要素
-
右からアイテムを削除
-
左に温度を挿入
-
-
左のサイズ-右のサイズ>1の場合、
-
temp:=左の一番上の要素
-
左からアイテムを削除
-
温度を右に挿入
-
-
findMedian()メソッドを定義します。これは次のように機能します-
左のサイズ>右のサイズの場合は左上を返し、それ以外の場合は(左上+右上)/ 2理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; typedef double lli; class MedianClass { priority_queue <int> left; priority_queue <int, vector <int>, greater<int>> right; public: void addNum(int num) { if(left.empty() || num<left.top()){ left.push(num); }else right.push(num); if(left.size()<right.size()){ lli temp = right.top(); right.pop(); left.push(temp); } if(left.size()−right.size()>1){ lli temp = left.top(); left.pop(); right.push(temp); } } double findMedian() { return left.size()>right.size()?left.top():(left.top()+right.top())*0.5; } }; main(){ MedianClass ob; ob.addNum(5); ob.addNum(3); ob.addNum(8); cout << ob.findMedian() << " "; ob.addNum(9); cout << ob.findMedian() << endl; }
入力
ob.addNum(5); ob.addNum(3); ob.addNum(8); cout << ob.findMedian() << endl; ob.addNum(9); cout << ob.findMedian() << endl;
出力
5.0 6.5
-
LCMを見つけるためのC++プログラム
2つの数値の最小公倍数(LCM)は、両方の倍数である最小公倍数です。 例:15と9の2つの数字があるとします。 15 = 5 * 3 9 = 3 * 3 したがって、15と9のLCMは45です。 2つの数値のLCMを見つけるプログラムは次のとおりです- 例 #include <iostream> using namespace std; int main() { int a=7, b=5, lcm; if(a>b) lcm = a; else  
-
GCDを見つけるためのC++プログラム
2つの数値の最大公約数(GCD)は、両方を除算する最大の数値です。 例:45と27の2つの数字があるとします。 45 = 5 * 3 * 3 27 = 3 * 3 * 3 したがって、45と27のGCDは9です。 2つの数値のGCDを見つけるプログラムは次のとおりです。 例 #include <iostream> using namespace std; int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b); } int