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

python-leetcode-直线上最多的点数

149. 直线上最多的点数 - 力扣(LeetCode)

class Solution:
    def maxPoints(self, points: List[List[int]]) -> int:
        n = len(points)
        if n <= 2:
            return n
        
        max_points = 0
        
        for i in range(n):
            slope_count = defaultdict(int)
            duplicates = 0
            verticals = 0
            local_max = 0
            
            for j in range(n):
                if i == j:
                    continue
                
                dx = points[j][0] - points[i][0]
                dy = points[j][1] - points[i][1]
                
                if dx == 0 and dy == 0:
                    # 重叠点
                    duplicates += 1
                elif dx == 0:
                    # 垂直线
                    verticals += 1
                else:
                    # 化简斜率
                    g = gcd(dx, dy)
                    dx //= g
                    dy //= g
                    
                    # 保证唯一表示,dx 为正数
                    if dx < 0:
                        dx = -dx
                        dy = -dy
                    
                    # 使用元组作为哈希表的键
                    slope_count[(dx, dy)] += 1
                    local_max = max(local_max, slope_count[(dx, dy)])
            
            max_points = max(max_points, max(local_max, verticals) + duplicates + 1)
        
        return max_points


http://www.kler.cn/a/548234.html

相关文章:

  • 网络安全 “免疫力”:从人体免疫系统看防御策略
  • Python实现AWS Fargate自动化部署系统
  • Vscode 主题,文件图标,插件
  • CSS预处理器——SCSS的灵活语法
  • 导出mysql数据库中表字段信息到excel表中,而不是导出数据
  • LVS-DR集群构建
  • 切换镜像源(npm)
  • TCP的滑动窗口机制及其在流量控制中的作用
  • 编程题-最大子数组和(中等-重点【贪心、动态规划、分治思想的应用】)
  • C++:高度平衡二叉搜索树(AVLTree) [数据结构]
  • 【电脑】u盘重装win7
  • 工作一个月的经历和总结
  • docker 进阶命令(基于Ubuntu)
  • LLM(大模型)评估综述:现状、挑战与未来方向
  • qt的QSizePolicy的使用
  • 面试总结:Qt 信号槽机制与 MOC 原理
  • 生成式人工智能:技术革命与应用图景
  • [C++语法基础与基本概念] std::function与可调用对象
  • Java 大视界 -- 绿色大数据:Java 技术在节能减排中的应用与实践(90)
  • H330阵列卡和H730阵列卡