【LeetCode】149. 直线上最多的点数

简介: 【LeetCode】149. 直线上最多的点数

题目链接

149. 直线上最多的点数

题目简介

给你一个数组points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。

示例 1:

输入:points = [[1,1],[2,2],[3,3]]
输出:3

题目解析

  1. 1.给定一些点,求哪些点在一条直线上
  2. 2.常见的做法有两种:
  • 第一种:计算每个点和其他点的斜率比(y2 - y1)/ (x2 - x1),将斜率比按 数值 存进 map
  • 第二种:计算每个点和其他点的斜率比(y2 - y1)/ (x2 - x1),将斜率比按 字符串 存进 map

3.这里需要注意一下,我们在计算斜率的时候,会出现分母为0的情况,在C++中不影响程序的运行,但是在Java中是影响程序运行的。我们去看下Java官方关于这一块的定义:

Thrown when an exceptional arithmetic condition has occurred. 
For example, an integer "divide by zero" throws an instance of this class.
当出现异常的运算条件时,抛出此异常。
例如,一个整数“除以零”时,抛出此类的一个实例。
  1. 所以,我们需要在我们整除的时候,将分子置为 小数 类型

题目代码

class Solution {
    public int maxPoints(int[][] points) {
        if(points.length == 1){
            return 1;
        }
        int max = 0;
        for (int i = 0; i < points.length; i++) {
            int x = points[i][0];
            int y = points[i][1];
            HashMap<Double, Integer> map = new HashMap<>();
            for (int j = 0; j < points.length; j++) {
                if (j != i) {
                    double target = ((points[j][1] - y) * 1.0)  / (points[j][0] - x);
                    if (map.containsKey(target)) {
                        int value = map.get(target);
                        map.put(target, ++value);
                    } else {
                        map.put(target, 2);
                    }
                }
            }
            for (Map.Entry<Double, Integer> entry : map.entrySet()) {
                max = Math.max(max, entry.getValue());
            }
        }
        return max;
    }
}












相关文章
|
26天前
|
存储
leetcode 740 删除并获得点数
【11月更文挑战第2天】给定一个整数数组 `nums`,每次可以选择删除一个元素并获得该元素的点数,同时该元素的左右相邻元素会变成相邻元素。目标是返回你能获得的最大点数。通过动态规划解决,统计每个数字的出现次数,设 `dp[i]` 表示以数字 `i` 结尾时能获得的最大点数。最终结果为 `dp` 数组中的最大值。时间复杂度为 O(n + m),空间复杂度为 O(m)。
|
3月前
|
算法 Java 索引
LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
37 0
【LeetCode】1423. 可获得的最大点数
【LeetCode】1423. 可获得的最大点数
|
6月前
|
算法 vr&ar 图形学
☆打卡算法☆LeetCode 149. 直线上最多的点数 算法解析
☆打卡算法☆LeetCode 149. 直线上最多的点数 算法解析
|
Java C++
LeetCode(剑指 Offer)- 60. n个骰子的点数
LeetCode(剑指 Offer)- 60. n个骰子的点数
96 0
LeetCode(剑指 Offer)- 60. n个骰子的点数
|
数据库
LeetCode(数据库)- 直线上的最近距离
LeetCode(数据库)- 直线上的最近距离
83 0
|
存储
LeetCode:149_Max Points on a line | 寻找一条直线上最多点的数量 | Hard
题目:Max Points on a line Given n points on a 2D plane, find the maximum number of points that lie on the same straight line. 这道题需要稍微转变一下思路,用斜率来实现,试想找在同一条直线上的点,怎么判断在一条直线上,唯一的方式也只有斜率可以完成,我开始没想到,后来看网友的思路才想到的,下面是简单的实现:其中有一点小技巧,利用map来存储具有相同斜率值的的点的数量,简洁高效。
939 0
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行