《leetcode-go》一条直线上的最多点数

Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
在平面上给n个点,求一条直线上最多有几个点。
第一反应是 两两结合,获取直线,判断其他点在不在直线上,复杂度n^3

注意相同的点算是两个点,所以只在第二层循环过滤相同的点,且需要记下有几个相同的点

package main

type Point struct {
	X int
	Y int
}

/**
 *
 * @param points Point类一维数组
 * @return int整型
 */
func maxPoints(points []*Point) int {
	// write code here
	num := len(points)
	if num <= 2 {
		return num
	}
	var i, j, k int
	max := 2
	for i = 0; i < num; i++ {
		x1 := points[i].X
		y1 := points[i].Y
		same := 0
		for j = i + 1; j < num; j++ {
			x2 := points[j].X
			y2 := points[j].Y
			if x1 == x2 && y1 == y2 {
				same++
				continue
			}
			tmp := 2
			for k = j + 1; k < num; k++ {
				x3 := points[k].X
				y3 := points[k].Y
				if (x3-x1)*(y1-y2) == (x1-x2)*(y3-y1) {
					tmp++
				}
			}
			if tmp > max {
				max = tmp + same
			}
		}
	}
	return max
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值