149. Max Points on a Line

Hard

今天上午有幸參加了Refdash的免費(fèi)Mock interview, 被暴擊一萬(wàn)點(diǎn).不過(guò)先刷完L家tag題再說(shuō)那道題吧.
這也是一道邏輯其實(shí)很簡(jiǎn)單智亮,但是很多細(xì)節(jié)容易出錯(cuò)的題.
要找到共線最多的點(diǎn),我們主線是通過(guò)找斜率. 遍歷每個(gè)點(diǎn)和它后面的點(diǎn)腔彰,找到倆倆斜率,構(gòu)建一個(gè)以斜率為key, 斜率出現(xiàn)的次數(shù)為value的hashMap. 我們用String來(lái)存斜率迹卢,要將dx, dy處理到lowest term拗小, 通過(guò)除以他們的最大公約數(shù)來(lái)做到. 這里求gcd的算法叫做Euclidean算法,具體見(jiàn)鏈接努隙,比較簡(jiǎn)單好用. 注意我們處理跟points[i]重合的點(diǎn)的方法是統(tǒng)計(jì)samePoint這個(gè)變量. 如果遇到i之后有相同的點(diǎn)就累加. 首先我們有一個(gè)總的res來(lái)統(tǒng)計(jì)當(dāng)前共線最多的點(diǎn)球恤,然后每遍歷一個(gè)點(diǎn)和其后面的點(diǎn)時(shí)(即每次進(jìn)入外層for循環(huán))都再記錄一個(gè)max來(lái)記錄這個(gè)點(diǎn)能跟后面的點(diǎn)組成共線點(diǎn)最多的那條直線上的點(diǎn)數(shù). 每走一遍內(nèi)循環(huán),就是遍歷到這個(gè)點(diǎn)后面的某個(gè)點(diǎn)荸镊,就用這個(gè)斜率下的頻數(shù)和當(dāng)前max的中的最大值來(lái)更新max. 每次遍歷完某個(gè)點(diǎn)之后所有的點(diǎn)(即內(nèi)循環(huán)遍歷完)咽斧,則更新一下總的res為Math.max(res, max). 同時(shí)注意一下,每一次外循環(huán)換一個(gè)點(diǎn)躬存,map要全部清除之前的記錄张惹。因?yàn)槲覀円业氖菑倪@個(gè)點(diǎn)出發(fā)的共線的最多點(diǎn),不能要之前的mapping, 只需要之前的res拿來(lái)更新就可以.

/**
 * Definition for a point.
 * class Point {
 *     int x;
 *     int y;
 *     Point() { x = 0; y = 0; }
 *     Point(int a, int b) { x = a; y = b; }
 * }
 */
class Solution {
    public int maxPoints(Point[] points) {
        if (points == null || points.length == 0){
            return 0;
        }
        Map<String, Integer> map = new HashMap<>();
        int res = 0;
        for (int i = 0; i < points.length; i++){
            map.clear();
            int samePoint = 1;
            int max = 0;
            for (int j = i + 1; j < points.length; j++){
                int dx = points[j].x - points[i].x;
                int dy = points[j].y - points[i].y;
                if (dx == 0 && dy == 0){
                    samePoint++;
                    continue;
                }
                int gcd = generateGCD(dx, dy);
                dx /= gcd;
                dy /= gcd;
                String slope = dy + "/" + dx;
                if (map.containsKey(slope)){
                    map.put(slope, map.get(slope) + 1);
                } else {
                    map.put(slope, 1);
                }                
                max = Math.max(max, map.get(slope));
            }
            res = Math.max(res, max + samePoint);
        }
        return res;
    }
        
    private int generateGCD(int a, int b){
        if (b == 0){
            return a;
        } else {
            return generateGCD(b, a % b);
        }
    }
}
    

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末岭洲,一起剝皮案震驚了整個(gè)濱河市宛逗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盾剩,老刑警劉巖雷激,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異告私,居然都是意外死亡屎暇,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門德挣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)恭垦,“玉大人,你說(shuō)我怎么就攤上這事格嗅》Γ” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵屯掖,是天一觀的道長(zhǎng)玄柏。 經(jīng)常有香客問(wèn)我,道長(zhǎng)贴铜,這世上最難降的妖魔是什么粪摘? 我笑而不...
    開(kāi)封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮绍坝,結(jié)果婚禮上徘意,老公的妹妹穿的比我還像新娘。我一直安慰自己轩褐,他們只是感情好椎咧,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般勤讽。 火紅的嫁衣襯著肌膚如雪蟋座。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天脚牍,我揣著相機(jī)與錄音向臀,去河邊找鬼。 笑死诸狭,一個(gè)胖子當(dāng)著我的面吹牛券膀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播驯遇,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼三娩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了妹懒?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤双吆,失蹤者是張志新(化名)和其女友劉穎眨唬,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體好乐,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡匾竿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蔚万。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岭妖。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖反璃,靈堂內(nèi)的尸體忽然破棺而出昵慌,到底是詐尸還是另有隱情,我是刑警寧澤淮蜈,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布斋攀,位于F島的核電站,受9級(jí)特大地震影響梧田,放射性物質(zhì)發(fā)生泄漏淳蔼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一裁眯、第九天 我趴在偏房一處隱蔽的房頂上張望鹉梨。 院中可真熱鬧,春花似錦穿稳、人聲如沸存皂。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)艰垂。三九已至泡仗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間猜憎,已是汗流浹背娩怎。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胰柑,地道東北人截亦。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像柬讨,于是被迫代替她去往敵國(guó)和親崩瓤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

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

  • Given n points on a 2D plane, find the maximum number of ...
    matrxyz閱讀 342評(píng)論 0 0
  • Given n points on a 2D plane, find the maximum number of ...
    ShutLove閱讀 293評(píng)論 0 0
  • 題目Given n points on a 2D plane, find the maximum number o...
    六尺帳篷閱讀 645評(píng)論 0 1
  • 朝陽(yáng)水上飄踩官, 海鷗映霞飛却桶; 漁人忙出船, 妻兒依依別蔗牡。
    木子春閱讀 202評(píng)論 0 0
  • 佳人在閣心思量颖系,撫琴高歌鳳求凰; 本意原為王孫顧辩越,得見(jiàn)佳人心惶惶嘁扼; 一見(jiàn)傾心夜奔去,家徒四壁弗哀傷黔攒; 誓言已隨流水...
    有澀天堂閱讀 355評(píng)論 0 1