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

C++での最大等周波数


正の整数の配列numがあるとすると、指定された配列numの配列プレフィックスの可能な限り長い長さを返す必要があります。これにより、このプレフィックスから1つの要素を削除して、そこに出現するすべての数値が削除されるようになります。同じ頻度です。残りの要素がない場合に1つの要素を削除した後でも、出現するすべての番号は同じ頻度(0)であると見なされます。

したがって、入力が[3,3,2,2,6,4,4,6]の場合、出力は7になります。したがって、インデックス4から要素6を削除すると、サブ配列は[3、 3,2,2,4,4]すべての要素が2回出現しました。

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

  • maxf:=0、res:=0

  • マップcntとfreqを定義する

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

    • x:=nums [i]

    • (cnt [x]を1増やします)

    • f:=cnt [x]

    • (freq [f]を1増やします)

    • freq[f-1]を1減らします

    • maxf:=maxfとfの最大値

    • maxf * freq [maxf]がiと同じまたは(maxf --1)*(freq [maxf -1] + 1)がiと同じか、maxfが1と同じ場合、-

      • res:=i + 1

  • 解像度を返す

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int maxEqualFreq(vector<int>& nums) {
      int maxf = 0, res = 0;
      map<int, int> cnt, freq;
      for (int i = 0; i < nums.size(); i++) {
         int x = nums[i];
         cnt[x]++;
         int f = cnt[x];
         freq[f]++;
         freq[f - 1]--;
         maxf = max(maxf, f);
         if (maxf * freq[maxf] == i || (maxf - 1) * (freq[maxf - 1] + 1) == i || maxf == 1) {
            res = i + 1;
         }
      }
      return res;
   }
};
main(){
   Solution ob;
   vector<int> v = {3,3,2,2,6,4,4,6};
   cout << (ob.maxEqualFreq(v));
}

入力

{3,3,2,2,6,4,4,6}

出力

7

  1. C++での四辺形の最大面積

    問題の説明 四辺形a、b、c、dの4つの辺が与えられた場合、与えられた辺から可能な四辺形の最大面積を見つけます。 アルゴリズム 以下のブラーマグプタの公式を使用して、この問題を解決できます- √(s-a)(s-b)(s-c)(s-d) 上記の式では、sは半周長です。次のように計算されます- S =(a + b + c + d)/ 2 例 例を見てみましょう- #include <bits/stdc++.h> using namespace std; double getMaxArea(double a, double b, double c, double d) {

  2. C++の積に等しいLCMの最大長サブアレイ

    配列Aがあるとします。サブ配列の最大長を見つける必要があります。そのLCMは、そのサブ配列の要素の積と同じです。そのようなサブ配列が見つからない場合は、-1を返します。配列が{6、10、21}で、長さが2であるとすると、サブ配列{10、21}があり、そのLCMは210で、積も210です。 アプローチは簡単です。 2以上の長さの可能なすべてのサブ配列をチェックする必要があります。サブ配列が条件を満たす場合は、回答を最大の回答とサブ配列の長さとして更新します。 例 #include <iostream> using namespace std; int gcd(int a, int