2021-09-03:直线上最多的点数。给你一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。力扣149。
2021-09-03:直线上最多的点数。给你一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。力扣149。
福大大 答案2021-09-03:
具体见代码。
代码用golang编写。代码如下:
package main
import "fmt"
func main() {
//points := [][]int{{1, 1}, {2, 2}, {3, 3}}
points := [][]int{{1, 1}, {3, 2}, {5, 3}, {4, 1}, {2, 3}, {1, 4}}
ret := maxPoints(points)
fmt.Println(ret)
}
// [
// [1,3]
// [4,9]
// [5,7]
// ]
func maxPoints(points [][]int) int {
if points == nil {
return 0
}
if len(points) <= 2 {
return len(points)
}
// key = 3
// value = {7 , 10} -> 斜率为3/7的点 有10个
// {5, 15} -> 斜率为3/5的点 有15个
map0 := make(map[int]map[int]int)
result := 0
for i := 0; i < len(points); i++ {
map0 = make(map[int]map[int]int)
samePosition := 1
sameX := 0
sameY := 0
line := 0
for j := i + 1; j < len(points); j++ { // i号点,和j号点,的斜率关系
x := points[j][0] - points[i][0]
y := points[j][1] - points[i][1]
if x == 0 && y == 0 {
samePosition++
} else if x == 0 {
sameX++
} else if y == 0 {
sameY++
} else { // 普通斜率
gcd0 := gcd(x, y)
x /= gcd0
y /= gcd0
// x / y
if _, ok := map0[x]; !ok {
map0[x] = make(map[int]int)
}
if _, ok := map0[x][y]; !ok {
map0[x][y] = 0
}
map0[x][y] = map0[x][y] + 1
line = getMax(line, map0[x][y])
}
}
result = getMax(result, getMax(getMax(sameX, sameY), line)+samePosition)
}
return result
}
// 保证初始调用的时候,a和b不等于0
// O(1)
func gcd(a int, b int) int {
if b == 0 {
return a
} else {
return gcd(b, a%b)
}
}
func getMax(a int, b int) int {
if a > b {
return a
} else {
return b
}
}
执行结果如下:

2021-09-03:直线上最多的点数。给你一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。力扣149。的更多相关文章
- lintcode 中等题:Max Points on a Line 最多有多少个点在一条直线上
题目 最多有多少个点在一条直线上 给出二维平面上的n个点,求最多有多少点在同一条直线上. 样例 给出4个点:(1, 2), (3, 6), (0, 0), (1, 3). 一条直线上的点最多有3个. ...
- lintcode-186-最多有多少个点在一条直线上
186-最多有多少个点在一条直线上 给出二维平面上的n个点,求最多有多少点在同一条直线上. 样例 给出4个点:(1, 2), (3, 6), (0, 0), (1, 3). 一条直线上的点最多有3个. ...
- [LintCode] 最多有多少个点在一条直线上
/** * Definition for a point. * struct Point { * int x; * int y; * Point() : x(0), y(0) {} * Point(i ...
- Java实现 LeetCode 149 直线上最多的点数
149. 直线上最多的点数 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | | o | ...
- Leetcode 149.直线上最多的点数
直线上最多的点数 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | | o ...
- leetcode 149. 直线上最多的点数 解题报告
给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | | o | o | o +------- ...
- Max Points on a Line(直线上最多的点数)
给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | | o | o | ...
- [Swift]LeetCode149. 直线上最多的点数 | 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. ...
- 判断两条直线的位置关系 POJ 1269 Intersecting Lines
两条直线可能有三种关系:1.共线 2.平行(不包括共线) 3.相交. 那给定两条直线怎么判断他们的位置关系呢.还是用到向量的叉积 例题:POJ 1269 题意:这道题是给定四个点p1, ...
- luogu 1142 轰炸 最多共线点数
题目链接 题意 给定\(n(n\leq 700)\)个点,问共线的点最多有多少个? 思路 \(O(n^3)\):枚举两个顶点确定一条直线,再看有多少个顶点在这条直线上.讲道理会T. \(O(n^2lo ...
随机推荐
- 12-如何使用Genarator逆向工程
使用逆向工程,帮我们更快的建立pojo类.mapper接口及xml映射文件等,无需手写,替代了一部分的mybatis功能. 一.导入MyGenarator逆向工程项目 二.修改xml配置文件 三.执行 ...
- appium 遇到连接设备状态是offline
1.查看连接手机设备 adb derivces 时,手机状态是offline状态(无法正常连接). 解决法: 1.adb kill-server 终止adb调试服务 2.adb start-serve ...
- WinForm分辨率适应-高DPI自动缩放
https://www.cnblogs.com/alittlecooing/p/WinForm-HighDPI.html 新建app.manifest文件后,去掉注释就可
- ThinkPHP网站安全方案
一.ThinkPHP介绍 ThinkPHP是一款优秀的网站内容管理系统,因其功能强大,操作简单,拥有海量用户和其他CMS一样,安全漏洞也是其无法避免的问题.虽然官方不断发布补丁.升级版本,但安全问题依 ...
- 详解数仓中sequence的应用场景及优化
摘要:本文简单介绍sequence的使用场景及如何修改sequence的cache值提高性能. 本文分享自华为云社区<GaussDB(DWS)关于sequence的那些事>,作者:Arro ...
- 一天吃透Git面试八股文
什么是Git? Git是一个版本控制系统,用于跟踪计算机文件的变化.Git是一个跟踪计算机文件变化的版本控制系统,用于帮助协调一个项目中几个人的工作,同时跟踪一段时间的进展.换句话说,我们可以说它是一 ...
- Maven安装详解
Maven Maven是apache软件基金会旗下的一个开源项目,是一款用于管理和构建Java项目的工具. Maven的作用? 先来简单介绍一下Maven的作用 (1)依赖管理 方便快捷的管理项目依赖 ...
- Salesforce LWC学习(十二) Dependence Picklist实现
本篇可参看: Salesforce LWC学习(六) @salesforce & lightning/ui*Api Reference salesforce零基础学习(八十七)Apex 中Pi ...
- Junit环境配置和在IDEA中使用Junit学习记录
Junit环境配置 步骤1:检查电脑中Java环境是否配置成功 因为JUnit 是 Java 的一个框架,所以最根本的需要是在你的机器里装有 JDK. 1.1 进入cmd控制台界面,输入java/ja ...
- mysql 求分组中位数、环比、同比、中位数的环比
说明 中位数.环比.同比概念请自行百度,本文求 字段A中位数.根据字段B分组后字段A中位数.字段A环比.字段A同比.字段A中位数的环比.字段A中位数的同比. 一.表结构如下图 查询条件为 capi ...