मान लीजिए कि हमारे पास 2D प्लेन है। हमें एक ही सीधी रेखा पर रहने वाले बिंदुओं की अधिकतम संख्या ज्ञात करनी है। तो अगर अंक इस तरह हैं -

फिर 4 अंक होते हैं
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
n :=अंकों की संख्या, यदि n <3 है, तो n लौटाएं
-
उत्तर :=2
-
मैं के लिए 1 से n - 1 की सीमा में
-
गिनती :=0
-
सूचकांक i और i – 1 से दो बिंदु लें, ये p1, p2 हैं
-
यदि p1 और p2 अंक समान हैं, तो
-
j के लिए 0 से n - 1 की सीमा में
-
यदि अंक [j]। x =p1.x और अंक [j] .y =p1.y, तो 1 से गिनती बढ़ाएं
-
-
-
अन्यथा -
-
j के लिए 0 से n - 1 की सीमा में
-
p3 :=अनुक्रमणिका j से बिंदु
-
अगर p3.y - p2.y * p2.x - p1.x =p2.y - p1.y * p3.x - p2.x, तो 1 से गिनती बढ़ाएं
-
-
-
उत्तर :=अधिकतम उत्तर और गिनती
-
-
वापसी उत्तर
उदाहरण
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
class Solution {
public:
int maxPoints(vector<vector<int>>& points) {
int n = points.size();
if(n<3)return n;
int ans = 2;
for(int i = 1;i<n;i++){
int count = 0;
lli x1 = points[i-1][0];
lli x2 = points[i][0];
lli y1 = points[i-1][1];
lli y2 = points[i][1];
if(x1 == x2 && y1 == y2){
for(int j =0;j<n;j++){
if(points[j][0] ==x1 && points[j][1] == y1)count++;
}
} else {
for(int j =0;j<n;j++){
int x3 = points[j][0];
int y3 = points[j][1];
if((y3-y2)*(x2-x1) == (y2-y1)*(x3-x2))count++ ;
}
}
ans = max(ans, count);
}
return ans;
}
};
main(){
Solution ob;
vector<vector<int>> v = {{1,1},{3,2},{5,3},{4,1},{2,3},{1,4}};
cout << (ob.maxPoints(v));
} इनपुट
[{1,1},{3,2},{5,3},{4,1},{2,3},{1,5}] आउटपुट
4