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

C++のすべての奇数の長さのサブリストの中央値の合計を見つけるプログラム


numsという数値のリストがあるとすると、指定されたリストのすべての奇数長のサブリストの中央値の合計を見つける必要があります。

したがって、入力がnums =[2、4、6、3]のようである場合、奇数の長さのサブリストは− [2]、[4]、[6]、[3]であるため、出力は23になります。 [2、4、6]、[4、6、3]なので、中央値の合計は2 + 4 + 6 + 3 + 4 + 4 =23

これを解決するには、次の手順に従います-

  • ret:=0

  • 初期化i:=0の場合、i

    • que_maxと呼ばれる優先キューを定義します

    • que_min

      と呼ばれる別の優先キューを定義します
    • 初期化j:=iの場合、j

      • nums[j]をque_maxに挿入します

      • que_maxのサイズ>=2の場合、実行-

        • que_maxの一番上の要素をque_minに挿入します

        • que_maxから最上位の要素を削除します

      • (que_minのサイズが0ではなく、que_maxの最上位要素> que_minの最上位要素)、do-

        • a:=que_maxの最上位要素、que_maxから最上位要素を削除

        • b:=que_minの最上位要素、que_minから最上位要素を削除

        • bをque_maxに挿入します

        • que_minにaを挿入します

      • imod2がjmod2と同じ場合、-

        • ret:=ret+que_maxの最上位要素

  • retを返す

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
int solve(vector<int>& nums) {
   int ret = 0;
   for (int i = 0; i < nums.size(); i++) {
      priority_queue<int> que_max;
      priority_queue<int, vector<int>, greater<int>> que_min;
      for (int j = i; j < nums.size(); j++) {
         que_max.push(nums[j]);
         while (que_max.size() - que_min.size() >= 2) {
            que_min.push(que_max.top());
            que_max.pop();
         }
         while (que_min.size() && que_max.top() > que_min.top()) {
            int a = que_max.top();
            que_max.pop();
            int b = que_min.top();
            que_min.pop();
            que_max.push(b);
            que_min.push(a);
         }
         if (i % 2 == j % 2) {
            ret += que_max.top();
         }
      }
   }
   return ret;
}
int main(){
   vector<int> v = {2, 4, 6, 3};
   cout << solve(v);
}

入力

{2, 4, 6, 3}

出力

23

  1. 数の奇数因子の合計を見つけるためのC++プログラム

    正の整数で与えられ、タスクは、数値の奇数因子を生成し、与えられた奇数因子の合計を見つけることです。 例 Input-: number = 20 Output-: sum of odd factors is: 6 Input-: number = 18 Output-: sum of odd factors is: 13 したがって、結果=1 + 5 =6 以下のプログラムで使用されるアプローチは次のとおりです − その数の奇数因子の合計を計算するための数を入力します 数字0と2は両方とも偶数であるため無視し、数字1は奇数であるため保存します ループを3から数値の平方根まで開始し

  2. Pythonのすべての隣接するサブリストの合計を見つけるプログラム

    numsと呼ばれる数値のリストがあると仮定し、ここですべての隣接するサブ配列を検討します。これらのサブ配列のそれぞれを合計し、これらすべての値の合計を返します。最後に、結果を10 ** 9+7で変更します。 したがって、入力がnums =[3、4、6]のような場合、次のサブ配列があるため、出力は43になります-[3] [4] [6] [3、4] [4、6] [3、4、6]これらすべての合計は43です。 これを解決するには、次の手順に従います- N:=numsのサイズ ans:=0 0からnumsのサイズの範囲のiの場合は、 n:=nums [i] ans:=ans +(i