直線上最多的點數(shù)

問題描述:

給定一個二維平面存炮,平面上有 n 個點梦染,求最多有多少個點在同一條直線上吱肌。

示例 1:

輸入:

 [[1,1],[2,2],[3,3]]

輸出:

 3

解釋:

^
|
|        o
|     o
|  o  
+------------->
0  1  2  3  4

示例 2:

輸入:

 [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]]

輸出:

 4

解釋:

^
|
|  o
|     o        o
|        o
|  o        o
+------------------->
0  1  2  3  4  5  6

思路:

尋找以某一點為起始點的斜率马靠,如果斜率相同的有幾個點是共線的,所以遍歷所有點作為起始點氢橙,計算起始點之后的點的斜率(之前的不用計算因為是重復(fù)的),放進map中恬偷,map的鍵是斜率悍手,值是點的個數(shù)。主要注意兩點問題:
使用double作為斜率的表達可能會因為精度問題導(dǎo)致不同的斜率算出的結(jié)果一樣袍患,而且注意double類型有0.0-0.0坦康,infinite-infinite的差別,存入map可能會出錯诡延,所以采用分?jǐn)?shù)轉(zhuǎn)成字符串進行表達滞欠。分?jǐn)?shù)的計算可以采用歐幾里得算法算出最大公約數(shù),然后分子分母分別除以最大公約數(shù)肆良,拼裝成字符串作為map的鍵仑撞。
要注意存在坐標(biāo)與起始點相同的點,這樣的點會造成所有共線的點數(shù)要增加妖滔,注意處理隧哮。

代碼:

import java.util.*;
class Point {
    int x;
    int y;
    Point() { x = 0; y = 0; }
    Point(int a, int b) { x = a; y = b; }
}
public class Solution {
    // 歐幾里得算法求最大公約數(shù)
    public int gcd(int a, int b){
        if (b == 0) return a;
        return gcd(b,a%b);
    }
    public int maxPoints(Point[] points) {
        if (points.length == 0) return 0;
        int res = 0;
        for (int i=0; i<points.length; i++){
            HashMap<String, Integer> kMap = new HashMap();
            int same = 1;// same用于保存與初始點坐標(biāo)相同的點的個數(shù)(包括初始點)
            for (int j=i+1; j<points.length; j++) {
                // 坐標(biāo)相同就把same++
                if (points[i].x == points[j].x &&
                        points[i].y == points[j].y) {
                    same++;
                } else {
                    int dy = points[j].y - points[i].y;
                    int dx = points[j].x - points[i].x;
                    int maxD = gcd(dx, dy);
                    // 將最簡分?jǐn)?shù)作為key
                    String key = dy/maxD + "/" + dx/maxD;
                    if (kMap.containsKey (key)) {
                        kMap.put(key, kMap.get(key) + 1);
                    } else {
                        kMap.put(key, 1);
                    }
                }
            }
            int count = 0;  // count統(tǒng)計不同斜率點的個數(shù)
            for (Map.Entry<String, Integer> entry : kMap.entrySet()){
                if (entry.getValue() > count){
                    count = entry.getValue();
                }
            }
            // res存共線點個數(shù)的最大值
            res = Math.max(res, count + same);
        }
        return res;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市座舍,隨后出現(xiàn)的幾起案子沮翔,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件采蚀,死亡現(xiàn)場離奇詭異疲牵,居然都是意外死亡,警方通過查閱死者的電腦和手機榆鼠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門纲爸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人妆够,你說我怎么就攤上這事识啦。” “怎么了神妹?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵颓哮,是天一觀的道長。 經(jīng)常有香客問我鸵荠,道長冕茅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任蛹找,我火速辦了婚禮姨伤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘庸疾。我一直安慰自己姜挺,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布彼硫。 她就那樣靜靜地躺著炊豪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拧篮。 梳的紋絲不亂的頭發(fā)上词渤,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天,我揣著相機與錄音串绩,去河邊找鬼缺虐。 笑死,一個胖子當(dāng)著我的面吹牛礁凡,可吹牛的內(nèi)容都是我干的高氮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼顷牌,長吁一口氣:“原來是場噩夢啊……” “哼剪芍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起窟蓝,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤罪裹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體状共,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡套耕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了峡继。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冯袍。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖碾牌,靈堂內(nèi)的尸體忽然破棺而出康愤,到底是詐尸還是另有隱情,我是刑警寧澤小染,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布翘瓮,位于F島的核電站贮折,受9級特大地震影響裤翩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜调榄,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一踊赠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧每庆,春花似錦筐带、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至腮出,卻和暖如春帖鸦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背胚嘲。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工作儿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人馋劈。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓攻锰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親妓雾。 傳聞我的和親對象是個殘疾皇子娶吞,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 給定一個二維平面,平面上有 n 個點械姻,求最多有多少個點在同一條直線上寝志。 示例 1: 示例 2: 代碼
    vbuer閱讀 796評論 0 0
  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 3,350評論 0 2
  • 首頁 資訊 文章 資源 小組 相親 登錄 注冊 首頁 最新文章 IT 職場 前端 后端 移動端 數(shù)據(jù)庫 運維 其他...
    Helen_Cat閱讀 3,887評論 1 10
  • 今天下周上班的一個狀態(tài)特別的困,看著時間一點點的過去,此時已經(jīng)到5點了才加了4個材部,咋辦毫缆?遞單頁的手變得越來越快,腳...
    印同密閱讀 761評論 0 0
  • 寫在畢業(yè)前277天 車?yán)锏囊魳泛鋈浑S機到周杰倫的《稻香》乐导,已經(jīng)是在公司的第三個月苦丁。下班后和男朋友心血來潮去我們最愛...
    2919310de6a6閱讀 601評論 0 0