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には、多数のプラグインを備えた巨大なプラグインストアもありま