• [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
     
     
     
     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  
     
     
     
     
  • 相关阅读:
    组合模式
    装饰者模式
    桥接设计模式
    Docker介绍
    适配器模式
    设计软件下载
    17种设计字体的创意方法
    less编译(mac版gulp)
    50种常用快捷键整理
    WebStorm设置手机测试服务器-局域网内其他设备访问
  • 原文地址:https://www.cnblogs.com/kkzxak47/p/3703095.html
Copyright © 2020-2023  润新知