[LeetCode OJ] Max Points on a Line

Submission Details

27 / 27 test cases passed.
Status: 
Accepted
Runtime:  472 ms
Submitted:  0 minutes ago

Submitted Code
Language:  java
  Edit Code  
 
 
 
 1 /**
 2  * Definition for a point.
 3  * class Point {
 4  *     int x;
 5  *     int y;
 6  *     Point() { x = 0; y = 0; }
 7  *     Point(int a, int b) { x = a; y = b; }
 8  * }
 9  */
10 import java.util.HashMap;
11 import java.util.Map;
12  
13  
14 public class Solution {
15     public int maxPoints(Point[] points) {
16         if (points == null || points.length == 0)
17             return 0;
18         int N = points.length;
19         if (N == 1)
20             return 1;
21         if (N == 2)
22             return 2;
23  
24         Map<String, Integer> dict = new HashMap<String, Integer>();
25         int maxOverall = 0;
26         for (int i = 0; i < N - 1; i++) {
27             int same = 1;
28             int max = 0;
29             for (int j = i + 1; j < N; j++) {
30  
31                 int p1x = points[i].x;
32                 int p1y = points[i].y;
33                 int p2x = points[j].x;
34                 int p2y = points[j].y;
35  
36                 if (p1x == p2x && p1y == p2y) {
37                     same++;
38                     continue;
39                 }
40  
41                 int A = p2y - p1y;
42                 int B = p1x - p2x;
43  
44                 int GCD = gcd(A, B);
45                 if (GCD != 0 && GCD != 1) {
46                     A /= GCD;
47                     B /= GCD;
48                 }
49                 if (A < 0) {
50                     A = -A;
51                     B = -B;
52                 }
53  
54                 String key = A + "," + B;
55 //              System.out.println("round:" + i + " " + key);
56                 int value = 1;
57                 if (dict.containsKey(key)) {
58                     value += dict.get(key);
59                 } 
60                 dict.put(key, value);
61                 max = max < value  ? value  : max;
62             }
63             
64             max += same;
65             maxOverall = maxOverall < max ? max : maxOverall;
66             dict.clear();
67         }
68  
69         return maxOverall;
70     }
71  
72     public int gcd(int a, int b) {
73         if (b == 0)
74             return a;
75         return gcd(b, a % b);
76     }
77 }
78  

 

 
 
 
 

转载于:https://www.cnblogs.com/kkzxak47/p/3703095.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值