当前位置: 首页 > news >正文

内容网站模板电竞网站建设方案

内容网站模板,电竞网站建设方案,云电脑免费体验,旺道seo优化软件怎么用LeetCode 149:直线上最多的点数问题本质与核心挑战 给定平面上的点集,需找到 同一直线上最多的点数。核心挑战: 如何高效判断三点共线(避免浮点数精度问题);如何统计不同直线上的点数,避免重复计…

LeetCode 149:直线上最多的点数

在这里插入图片描述

问题本质与核心挑战

给定平面上的点集,需找到 同一直线上最多的点数。核心挑战:

  • 如何高效判断三点共线(避免浮点数精度问题);
  • 如何统计不同直线上的点数,避免重复计算。

核心思路:斜率归一化 + 哈希表统计

1. 斜率的归一化表示

两点 (x1,y1)(x2,y2) 的斜率可通过 Δx 和 Δy 的最简分数形式 表示,避免浮点数误差:

  • 计算 Δx = x2 - x1Δy = y2 - y1
  • ΔxΔy最大公约数(GCD),将两者除以 GCD 得到最简形式;
  • 统一符号:确保相同斜率的表示唯一(如 Δx=-2, Δy=4Δx=2, Δy=-4 应归一为同一键)。
2. 哈希表统计
  • 枚举每个点作为基准点,统计其他点与该基准点的斜率;
  • 用哈希表记录同一斜率的点的数量,结合基准点自身,得到当前直线的最大点数;
  • 遍历所有基准点,更新全局最大值。

算法步骤详解(以示例 points = [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]] 为例)

步骤 1:特殊情况处理

若点集大小 n ≤ 2,直接返回 n(所有点共线)。

步骤 2:枚举基准点,计算斜率

以点 (3,2)(索引 1)为基准点,计算其他点的斜率:

其他点 (x,y)Δx = x-3Δy = y-2GCD(Δx,Δy)最简形式(Δx/GCD, Δy/GCD)归一化键(统一符号后)
(1,1)-2-11(-2,-1)2,1(Δx<0,取反)
(5,3)211(2,1)2,1
(4,1)1-11(1,-1)1,-1
(2,3)-111(-1,1)1,-1(Δx<0,取反)
(1,4)-222(-1,1)1,-1(Δx<0,取反)
步骤 3:哈希表统计与最大值更新
  • 哈希表记录斜率 2,1 出现 2 次,1,-1 出现 3 次;
  • 当前基准点的最大点数为 3 + 1 = 43 个其他点 + 基准点自身),与示例输出一致。

完整代码(Java)

class Solution {public int maxPoints(int[][] points) {int n = points.length;if (n <= 2) return n; // 特殊情况:≤2个点必共线int maxCount = 0;for (int i = 0; i < n; i++) { // 枚举每个基准点Map<String, Integer> slopeMap = new HashMap<>();int currentMax = 0;for (int j = 0; j < n; j++) { // 遍历其他点if (i == j) continue; // 跳过自身int x1 = points[i][0], y1 = points[i][1];int x2 = points[j][0], y2 = points[j][1];int dx = x2 - x1;int dy = y2 - y1;String key = getNormalizedSlope(dx, dy); // 归一化斜率slopeMap.put(key, slopeMap.getOrDefault(key, 0) + 1);currentMax = Math.max(currentMax, slopeMap.get(key));}maxCount = Math.max(maxCount, currentMax + 1); // +1 包含基准点自身}return maxCount;}// 归一化斜率:返回统一表示的键private String getNormalizedSlope(int dx, int dy) {if (dx == 0 && dy == 0) {return "0,0"; // 理论上不会出现(点不重复)}int gcd = computeGCD(dx, dy);dx /= gcd;dy /= gcd;// 统一符号:保证dx非负;若dx为0,保证dy非负if (dx == 0) {dy = Math.abs(dy);} else {if (dx < 0) {dx = -dx;dy = -dy;}}return dx + "," + dy;}// 计算最大公约数(处理负数)private int computeGCD(int a, int b) {a = Math.abs(a);b = Math.abs(b);while (b != 0) {int temp = b;b = a % b;a = temp;}return a;}
}

关键逻辑解析

  1. 斜率归一化

    • 通过 GCD 约分 Δx 和 Δy,避免重复斜率因倍数关系被误判;
    • 统一符号(如 (-2,-1) 转为 (2,1)),确保相同斜率的键唯一。
  2. 哈希表统计

    • 每个基准点独立统计,避免不同基准点的斜率干扰;
    • currentMax + 1 包含基准点自身,保证计数正确。
  3. 时间复杂度

    • 外层遍历 O(n) 个基准点,内层遍历 O(n) 个点,哈希表操作 O(1),总复杂度 O(n²),可处理 n=300 的规模。

该方法通过 数学归一化解决精度问题,结合 哈希表高效统计,完美平衡了正确性和效率,是处理“共线点计数”问题的经典方案。

http://www.dtcms.com/a/416587.html

相关文章:

  • dedecms 网站名称标签好的php网站
  • 湖南建设厅网站设计开发流程
  • 外贸网站虚拟主机昆明经济技术开发区官方门户网站
  • 风云格式工厂 6.8.0.apk:
  • 春节网站怎么做typecho还是WordPress
  • 公司建一个网站要多少钱wordpress源码解析
  • 没内容的网站怎么优化免费表白网站制作
  • 有用的网站地址无锡专业网站制作
  • 【ROS学习笔记】ROS1和ROS2对比
  • 郑州网站提升排名wordpress文章页面添加打赏
  • 江阴公司做网站wordpress 插件 手机
  • 海口网站建设方案报价百度产品优化排名软件
  • 怎么样建设一个电影网站视频下载免费行情的软件大全下载
  • 微信上优惠券的网站怎么做的苏州360推广 网站建设
  • 附近有木有做网站扁平化企业网站模板
  • 上海电商网站开发公司网站微信建设运维经验
  • 网站系统建设方案站嗨建站
  • 个人做电影网站违法吗杭州市住建局官网
  • 用宝塔面板快速构建LNMP环境
  • 一天一款实用的AI工具,第4期,AI翻译成英语
  • 表白网站制作源代码深圳市建设局网站首页
  • 电子商务网站建设方案书网站推广案例分析
  • h5如何做网站手机网站开发项目
  • 电子商务网站建设试题二济南标场馆建设有新进展
  • 网站百度推广加盟类网站建设
  • 微信电脑网站是什么原因硬件工程师培训机构哪家好
  • P3044题解
  • 彩票网站开发注意事情江苏省建设执业资格注册中心网站
  • 泉州建设网站开发承德网站建设方案
  • 信号量(一)