Go--Println、Printf區別
阿新 • • 發佈:2022-05-28
149. 直線上最多的點數
給你一個數組 points
,其中 points[i] = [xi, yi]
表示 X-Y 平面上的一個點。求最多有多少個點在同一條直線上。
示例 1:
輸入:points = [[1,1],[2,2],[3,3]]
輸出:3
示例 2:
輸入:points = [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]]
輸出:4
提示:
1 <= points.length <= 300
points[i].length == 2
-104 <= xi, yi <= 104
-
points
中的所有點 互不相同
思路:
利用雜湊表去儲存直線即可,注意對於斜率要正確的去表示.
不過像這樣除法計算應該是不準確的,但是卻可以通過。
最好記錄把y/x化簡成最簡形式,儲存下來,如果計算除法會出現偏差問題
class Solution { public: int maxPoints(vector<vector<int>>& points) { int len = points.size(); // 點的數量不夠 if(len < 3) { return len; } int maxNum = 2; // 遍歷每兩個點 for(int i = 0; i < len; i ++) { unordered_map<double, int> count;//y=kx+b 雜湊表儲存斜率 for(int j = 0; j < len; j ++) {//求每兩個點之間的直線 if(i != j) { long long dx = points[i][0] - points[j][0]; long long dy = points[i][1] - points[j][1]; double gradient = dy * 1.0 / dx; if(count.count(gradient)) {//如果雜湊表中存在那麼就技術 count[gradient] ++; } else { count[gradient] = 2; } maxNum = max(maxNum, count[gradient]);//更新最大值 } } } return maxNum; } };