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

C++でのスライディングウィンドウの最大値


numsという配列があるとすると、配列の左から右に移動するサイズkのスライディングウィンドウがあります。ウィンドウにはk個の数字しか表示されません。スライディングウィンドウが1つの位置だけ右側に移動するたび。最大スライディングウィンドウを見つける必要があります。したがって、入力が-[1,3、-1、-3,5,3,6,8]のようで、kが3の場合、ウィンドウは-

のようになります。 ウィンドウの位置
最大
1 3 -1 -3 5 3 6 8 3
1 3 -1 -3 5 3 6 8 3
1 3 -1 -3 5 3 6 8 3
1 3 -1 -3 5 3 6 8 5
1 3 -1 -3 5 3 6 8 6
1 3 -1 -3 5 3 6 8 8

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

  • 配列を定義します

  • 1つの両端キューdqを定義します

  • numsのサイズが0と同じ場合は、ansを返します

  • iを初期化する場合:=0、i

    • dqが空ではなく、nums[dqの最後の要素]

      • dqの最後の要素を削除する

    • dqの最後にiを挿入します

  • i:=kを初期化する場合、i

    • (nums [dqのフロント要素])をansに挿入します

    • dqが空ではなく、dq <(i-k + 1)の前の要素である場合、-

      を実行します。
      • dqからフロント要素を削除します

    • dqが空ではなく、nums[dqの最後の要素]を実行します。

      • dqの最後の要素を削除する

    • dqの最後にiを挿入します

  • nums[dqのフロント要素]を最後のansに挿入します

  • ansを返す

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

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
void print_vector(vector<vector<auto> > v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << "[";
      for(int j = 0; j <v[i].size(); j++){
         cout << v[i][j] << ", ";
      }
      cout << "],";
   }
   cout << "]"<<endl;
}
class Solution {
   public:
   vector<int> maxSlidingWindow(vector<int>& nums, int k) {
      vector <int> ans;
      deque <int> dq;
      if(nums.size()==0)return ans;
      for(int i =0;i<k;i++){
         while(!dq.empty() && nums[dq.back()]<nums[i])dq.pop_back();
         dq.push_back(i);
      }
      for(int i = k;i<nums.size();i++){
         ans.push_back(nums[dq.front()]);
         while(!dq.empty() && dq.front()<(i-k + 1))dq.pop_front();
         while(!dq.empty() && nums[dq.back()]<nums[i])dq.pop_back();
         dq.push_back(i);
      }
      ans.push_back(nums[dq.front()]);
      return ans;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,3,-1,-3,5,3,6,8};
   print_vector(ob.maxSlidingWindow(v,3));
}

入力

{1,3,-1,-3,5,3,6,8}

出力

[3, 3, 5, 5, 6, 8, ]

  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. Window上のc++のトップIDEは何ですか?

    大きなプロジェクトは、単なるテキストエディタでは管理が困難です。このような場合にIDEを使用すると、生産性が向上し、フラストレーションが軽減される可能性があります。 IDEにはさまざまな種類があり、ニーズに合ったものを選択する必要があります。これがWindowに最適なC/C++IDEのリストです。 Visual Studio − Microsoftが開発したIDEです。このIDEは、Windows上でC ++のプログラムを構築、開発、およびプロファイリングするためのクラス最高のツールを備えています。 Visual Studioには、多数のプラグインを備えた巨大なプラグインストアもありま