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