Leetcode: Max Points on a Line .
2014-05-23 22:48
375 查看
题目:
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
解决:
[java] view
plaincopy
import java.util.HashMap;
import java.util.Map;
class Point {
int x;
int y;
Point() {
x = 0;
y = 0;
}
Point(int a, int b) {
x = a;
y = b;
}
}
/**
* 暴力破解:
* 遍历所有的点,每次取一个点,计算这个点与其他点斜率k,对k统计,找最大的。
* 注意相同的点, 水平或竖直同线的点。
* @author Administrator
*
*/
public class LinePoints {
public int maxPoints(Point[] points) {
if (points.length < 2)
return points.length;
int global_max = 0;
Map<Double, Integer> map_k = new HashMap<Double, Integer>();
for (int i = 0; i < points.length; i++) {//遍历,每次取一点A
int one_point_max = 0;
int h_max = 0;
int same_point_num = 0;
map_k.clear();
for (int j = 0; j < points.length; j++) {//计算点A与其他点的斜率k
if (i == j) {// itself
continue;
} else {
if (points[i].x == points[j].x
&& points[i].y == points[j].y) {// same point
same_point_num++;
continue;
} else {
if (points[i].x == points[j].x) {// 竖直同线的点
h_max++;
if (h_max > one_point_max)
one_point_max = h_max;
} else {
double k = 0;
if (points[i].y == points[j].y)//水平同线的点
k = 0;
else
k = ((double) (points[i].y - points[j].y))
/ ((double) (points[i].x - points[j].x));
int k_v = 1;
Double dk = new Double(k);
if (map_k.get(dk) != null) {
k_v = map_k.get(dk) + 1;
}
map_k.put(dk, new Integer(k_v));
if (k_v > one_point_max)
one_point_max = k_v;
}
}
}
}// end of for
if (one_point_max + same_point_num > global_max)
global_max = one_point_max + same_point_num;
}// end of for
return global_max + 1;
}
public static void main(String[] args) {
LinePoints lp = new LinePoints();
Point[] points = new Point[2];
points[0] = new Point(0, 0);
points[1] = new Point(0, 0);
int s = lp.maxPoints(points);
System.out.println(s);
}
}
参考:
/article/1382292.html
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
解决:
[java] view
plaincopy
import java.util.HashMap;
import java.util.Map;
class Point {
int x;
int y;
Point() {
x = 0;
y = 0;
}
Point(int a, int b) {
x = a;
y = b;
}
}
/**
* 暴力破解:
* 遍历所有的点,每次取一个点,计算这个点与其他点斜率k,对k统计,找最大的。
* 注意相同的点, 水平或竖直同线的点。
* @author Administrator
*
*/
public class LinePoints {
public int maxPoints(Point[] points) {
if (points.length < 2)
return points.length;
int global_max = 0;
Map<Double, Integer> map_k = new HashMap<Double, Integer>();
for (int i = 0; i < points.length; i++) {//遍历,每次取一点A
int one_point_max = 0;
int h_max = 0;
int same_point_num = 0;
map_k.clear();
for (int j = 0; j < points.length; j++) {//计算点A与其他点的斜率k
if (i == j) {// itself
continue;
} else {
if (points[i].x == points[j].x
&& points[i].y == points[j].y) {// same point
same_point_num++;
continue;
} else {
if (points[i].x == points[j].x) {// 竖直同线的点
h_max++;
if (h_max > one_point_max)
one_point_max = h_max;
} else {
double k = 0;
if (points[i].y == points[j].y)//水平同线的点
k = 0;
else
k = ((double) (points[i].y - points[j].y))
/ ((double) (points[i].x - points[j].x));
int k_v = 1;
Double dk = new Double(k);
if (map_k.get(dk) != null) {
k_v = map_k.get(dk) + 1;
}
map_k.put(dk, new Integer(k_v));
if (k_v > one_point_max)
one_point_max = k_v;
}
}
}
}// end of for
if (one_point_max + same_point_num > global_max)
global_max = one_point_max + same_point_num;
}// end of for
return global_max + 1;
}
public static void main(String[] args) {
LinePoints lp = new LinePoints();
Point[] points = new Point[2];
points[0] = new Point(0, 0);
points[1] = new Point(0, 0);
int s = lp.maxPoints(points);
System.out.println(s);
}
}
参考:
/article/1382292.html
相关文章推荐
- LeetCode: Max Points on a Line
- Leetcode 149. Max Points on a Line
- LeetCode Max Points on a Line
- [LeetCode] 149. Max Points on a Line 共线点个数
- [LeetCode]149. Max Points on a Line 深入浅出讲解和代码示例
- 【leetcode】:max-points-on-a-line
- LeetCode "Max Points on a Line "
- LeetCode刷题笔录Max Points on a Line
- LeetCode | Max Points on a Line
- Leetcode: Max Points on a Line
- [leetcode-149]Max Points on a Line(java)
- Max Points on a Line | leetcode
- Max Points on a Line(leetcode)
- Leetcode:Max Points on a Line
- [LeetCode] Max Points on a Line
- LeetCode Max Points on a Line
- Java for LeetCode 149 Max Points on a Line
- 【LeetCode-Hard-1】【Max Points on a Line】【点集中最大共线数】
- Leetcode-Max Points on a Line
- [LeetCode]149. Max Points on a Line