C++でのロシアの人形の封筒
いくつかのエンベロープがあると仮定します。これらのエンベロープには、高さと幅の値がペアで含まれています。 2番目のエンベロープの高さと幅の両方が最初のエンベロープの高さと幅よりも小さい場合は、1つのエンベロープを別のエンベロープに入れることができます。それで、私たちが他の中に入れることができるエンベロープの最大数は何でしょう。したがって、入力が[[5,5]、[6,4]、[6,8]、[2,3]]の場合、最小のエンベロープは[2,3]であるため、出力は3になります。次に[5,5]、次に[6,8]。
これを解決するには、次の手順に従います-
- 高さに基づいて配列vを並べ替えます。高さが同じ場合は、幅と比較します
- vのサイズが0と同じ場合、-
- 0を返す
- 配列retを定義する
- iを初期化する場合:=0、i
- 配列の定義temp=v [i]
- x:=temp [1]
- 低:=0、高:=retのサイズ、curr:=0
- 低い<=高い間、-
- を実行します
- 中:=低+(高-低)/ 2
- ret [mid]
- curr:=mid + 1
- 低:=中+1
- それ以外の場合
- 高:=中-1
- 次の部分を無視し、次の反復にスキップします
- retの最後にtemp[1]を挿入
- ret [curr]:=temp [1]
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
static bool cmp(vector <int> a, vector <int> b){
if(a[0] == b[0])return a[1] > b[1];
return a[0] < b[0];
}
int maxEnvelopes(vector<vector<int>>& v) {
sort(v.begin(), v.end(), cmp);
if(v.size() == 0)return 0;
vector <int> ret;
for(int i = 0; i < v.size(); i++){
vector <int> temp = v[i];
int x = temp[1];
int low = 0;
int high = ret.size() -1;
int curr = 0;
while(low <= high){
int mid = low + (high - low) / 2;
if(ret[mid]<temp[1]){
curr = mid + 1;
low = mid + 1;
}else{
high = mid - 1;
}
}
if(curr < 0) continue;
if(curr >= (int)ret.size()){
ret.push_back(temp[1]);;
}else{
ret[curr] = temp[1];
}
}
return ret.size();
}
};
main(){
Solution ob;
vector<vector<int>> v = {{5,5}, {6,4}, {6,8}, {2,3}};
cout << (ob.maxEnvelopes(v));
} 入力
{{5,5}, {6,4}, {6,8}, {2,3}} 出力
3
-
C++でプロセスを強制終了します
n個のプロセスがあるとします。ここでは、各プロセスにPIDまたはプロセスIDと呼ばれる一意のIDがあり、そのPPID(親プロセスID)もそこにあります。 各プロセスには1つの親プロセスしかありませんが、1つ以上の子プロセスがある場合があります。 これは木の構造のようなものです。 PPID =0のプロセスは1つだけです。これは、このプロセスに親プロセスがないことを意味します。すべてのPIDは一意の正の整数になります。 プロセスのリストを表すために2つの整数のリストを使用します。最初のリストには、各プロセスのPIDが含まれ、2番目のリストには対応するPPIDが含まれます。したがって、2つのリ
-
C++でのリスのシミュレーション
木、リス、そしていくつかのナッツがあります。位置は、2Dグリッドのセルで表されます。あなたの目標は、リスがすべてのナッツを集めて、それらを1つずつ木の下に置くための最小距離を見つけることです。リスは一度に最大で1つのナットしかとることができず、隣接するセルに向かって上下左右の4つの方向に移動できます。距離は移動回数で表されます。 したがって、入力が高さ:5幅:7木の位置:[2,2]リス:[4,4]ナッツ:[[3,0]、[2,5]]の場合、出力は12になります。 、 これを解決するには、次の手順に従います- 関数calc()を定義します。これには、x1、y1、x2、y2、が必要で