leetcode3题解 Max Points on a line
来源:互联网 发布:专业数据库恢复 编辑:程序博客网 时间:2024/05/16 17:13
题目大意:给出任意点(x,y)的数组,找出在同一条线上最多的点数
解题思路:直接暴力解法,三重循环,任意连接两条线,通过斜率判断其他点是否在上面
使用一个布尔变量isAllSame来判断所有的点是否一样,连接不同的两个点形成一条线,对第三个点,考虑(1)这条线如果垂直,只考虑x是否相等 (2)这条线不垂直,考虑a)是否和其他两个点一样 b)斜率是否相等
更新最大值maxCount
注意点:重复的点计算,斜率计算分母为0的情况需要特殊考虑
public class Solution {public static void main(String[] args) {Point p1 = new Point(1,1);Point p2 = new Point(1,1);Point p3 = new Point(2,3);Solution s = new Solution();Point[] points = new Point[]{p1, p2, p3};System.out.println(s.maxPoints(points));}public boolean isPointEqual(Point p1, Point p2){ //判断两个点是否相等if(p1.x == p2.x && p1.y == p2.y){return true;}return false;}public int maxPoints(Point[] points){if(points.length <= 2) return points.length;int maxCount = Integer.MIN_VALUE;boolean isAllSame = false;for(int i = 0; i < points.length; i++){for(int j = i+1; j < points.length; j++){if(!(points[i].x == points[j].x && points[i].y == points[j].y)){isAllSame = true;double ratio = Double.MAX_VALUE;int pointCount = 2;boolean isVertical = false;if(points[i].x == points[j].x){isVertical = true;}else{ratio = (double)(points[j].y - points[i].y)/(points[j].x - points[i].x);}for(int k = 0; k < points.length; k++){if(k != i && k != j){if(isVertical){if(points[k].x == points[i].x){ //连线垂直,只考虑xpointCount++;}}else{ //分别考虑点是否和其他两个点相等、斜率if(this.isPointEqual(points[k], points[i])||this.isPointEqual(points[k], points[j])){pointCount++;}else{double tmp = (double)(points[k].y - points[i].y)/(points[k].x - points[i].x);if(ratio == tmp){pointCount++;}}}}}if(pointCount > maxCount){maxCount = pointCount;}}}}if(!isAllSame){return points.length;}else{return maxCount;}}}
/** * Definition for a point. * class Point { * int x; * int y; * Point() { x = 0; y = 0; } * Point(int a, int b) { x = a; y = b; } * } */
0 0
- leetcode3题解 Max Points on a line
- Leetcode3: Max Points on a Line
- 【牛客网】max-points-on-a-line题解
- LeetCode 题解(42): Max Points on a Line
- leetcode题解-149. Max Points on a Line
- Max Points on a Line
- Max Points on a Line
- Max Points on a Line
- Max Points on a Line
- Max Points on a Line
- Max Points on a Line
- Max Points On a Line
- Max Points on a Line
- Max Points on a Line
- Max Points on a Line
- max points on a line
- Max Points on a Line
- Max Points on a Line
- 动态函数调用实现下列操作,输入2个数以及操作符计算结果。@求最大公约数 $求最小公倍数 -求差 +求和
- Codeforces Beta Round #17 D题 福大核武 景润后人!!!
- 大数加法
- Java 中 泛型的限定
- C程序设计语言(K&R)第二章学习笔记
- leetcode3题解 Max Points on a line
- 空格替换
- 水晶报表之自定义函数
- 简单字符串排序
- iOS地图和定位
- poj3281Dining网络流-最大流
- 字符串替换
- VB.NET 总结
- 372a