LeetCode
Guide
C++
Hard
Difficulty: Hard
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
給定n個2D平面上的點,找出所有可能的共線中,含有點最多的點個數。
input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.
基本上一定會超時,所以我就不做了。
簡單來說就是分別找2個點,然後把其他點全部檢查一次,時間複雜度會是O(n^3)
Runtime: 12 ms > 98.24%
Memory: 9.2 MB > 78.57%
這個做法很像暴力破解,但是用了一點技巧。
首先,每次的迭代只找一個點,並且輪流跟其他點計算斜率。(程式碼Line18~26的部分。)
這樣一來,我可以確定把選定的這個點相關的所有線都找完。
並且,從3點共線的定義:
可以反推回去。
又因為一次迭代就會把關於這個選定點的直線檢查完,所以在計算後可以先刪除。
之後每次迭代就只需要檢查剩餘的點即可。