C++の適切な年齢の友達
友達リクエストをする人がいるとしましょう。私たちは彼らの年齢を知っています、これらはages[i]に保存されています。つまり、これはi番目の人の年齢を示しています。これで、次の条件のいずれかが当てはまる場合、Aは人物B(B!=A)を友達リクエストしません-
- 年齢[B]<=0.5*年齢[A]+7
- 年齢[B]>年齢[A]
- 年齢[B]>100&&年齢[A]<100
それ以外の場合、AはBを友達リクエストします。AがBをリクエストした場合、Bは必ずしもAをリクエストするとは限りません。また、人々は自分自身を友達リクエストしません。では、友達リクエストの総数を見つける必要がありますか?
年齢配列が[16,17,18]のような場合、リクエストは17-> 16、18-> 17になるため、結果は2になります。
これを解決するには、次の手順に従います-
- サイズ1000の配列バケットを定義してから、年齢の配列要素の頻度をバケットに格納します。
- 次に、バケット要素の累積合計を見つけてバケットに保存します
- ret:=0
- 0から年齢配列のサイズまでの範囲のiの場合– 1
- x:=ages [i]、y:=(ages [i] / 2)+ 7
- x> =yの場合、
- ret:=バケット[x] –バケット[y]
- バケツ[x]–バケツ[y]がゼロ以外の場合、retを1減らします
- returnret。
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; class Solution { public: int numFriendRequests(vector<int>& ages) { vector <int> bucket(1000); for(int i = 0; i < ages.size(); i++){ bucket[ages[i]]++; } for(int i = 1; i < 1000; i++)bucket[i] += bucket[i - 1]; int ret = 0; for(int i = 0; i < ages.size(); i++){ int x = ages[i]; int y = ((ages[i]) / 2) + 7; if(x >= y){ ret += (bucket[x] - bucket[y]); if((bucket[x] - bucket[y])) ret--; } } return ret; } }; main(){ vector<int> v1 = {16, 17, 18}; Solution ob; cout << (ob.numFriendRequests(v1)); }
入力
[16,17,18]
出力
2
-
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、が必要で