力扣中國 · #67
二进制求和(Add Binary)
暴力枚舉每對點,利用 GCD 標準化斜率向量來統計共線點數。
開啟原題 ↗時間複雜度O(n^2)
空間複雜度O(n)
解釋模型qwen/qwen3.8-27b
解題思路
作者很懶,所以我請 qwen/qwen3.8-27b 來幫他解釋。
此程式碼實際解決的是「最大共線點數」問題,而非二進位加法。演算法以每個點為起點,計算與其他所有點的斜率(透過 GCD 化簡方向向量以處理垂直與水平線),並統計相同斜率的點數,最終回傳最大共線點數加一。
通過的程式碼
class Solution:
def maxPoints(self, points: List[List[int]]) -> int:
if len(points) <=2 : return len(points)
ans =0
for i in range(len(points)-1):
slp = defaultdict(int)
for j in range(i+1, len(points)):
dx = points[j][0] - points[i][0]
dy = points[j][1] - points[i][1]
if dy < 0:
dx *= -1
dy *= -1
if dx == 0:
dy = 1
elif dy == 0:
dx = 1
else:
g =gcd(dx, dy)
dx = dx //g
dy = dy //g
slp[(dx,dy)]+=1
ans = max(ans, slp[(dx, dy)])
return ans +1