力扣中國 · #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