複数の1Dポイントを保持するSolutionクラスを作成する必要があります。このクラスには、中心とその中心に最も近いk個のポイントを計算するための数値kを指定できます。入れ子クラスからメンバ変数にアクセスする方法
私のコード、
class Solution {
private:
int center_;
struct Point {
int x;
bool operator<(const Point &other) const {
return (x - center_) * (x - center_) < (other.x - center_) * (other.x - center_);
}
};
public:
vector<int> findNearestKPoints(vector<int> &nums, int k, int center) {
center_ = center;
// vetor<int> to vector<Point>
vector<Point> points;
for (int num : nums) {
points.push_back({num});
}
// partition vector<Point>
nth_element(points.begin(), points.begin() + k - 1, points.end());
// vector<Point> to vector<int>
vector<int> res;
for (int i = 0; i < k; ++i) {
const Point &point = points[i];
res.push_back(point.val);
}
return res;
}
}
が、それはコンパイルできません。
コンパイルエラーはそれを修正するために、どのように
use of non-static data member 'center_' of 'Solution' from nested type 'Point'
のですか? おそらく、最近点を計算する他の方法があります。
'Point'は' Solution'か、単に 'Point'に' center_'を移動への参照を保持するために取得します。それがネストされたクラスであるという事実は、それがネストされたクラスへのアクセスを持っているという意味ではありません。 – DeiDei
@DeiDei - それは非常に非効率的な解法です。あなたはすべてのポイントで4または8バイトの参照を持ちます単一のint値のデータこれは、50%または100%のオーバーヘッドです。ベクトルの点であるため、おそらくそれらの多くがあります。さらに、それぞれのポイントごとにリファレンスを初期化するという不便さもあります。参照は実行可能な解決策になる可能性がありますが、この特定の場合はそうではありません。 – dtech