雜湊應用 求同一條直線上的點的數量

2021-09-27 13:26:32 字數 2991 閱讀 5256

題目

description

現在輸入n個平面座標系上點,每個點均是過原點的直線(形如y=kx,k為int型,0input

首先輸入的是點的數量n,接下來是n行資料,每行都是乙個點的座標。

output

輸出一條經過最多點的直線上的點的數量m(int)。

sample input 1

91 1

2 21 50

4 43 6

5 52 90

3 99

3 9sample output 1

4分析

第一次更新

這次所貼**還沒有過oj系統,始終有乙個wrong answer,筆者還沒有查明具體的原因,但是基本的思路還是確定無誤,因此先貼上來方便查驗交流所用。

首先宣告,這並不是乙個好的完整的雜湊表,然而筆者向來主張具體的場景應用具體的資料結構和相關的操作集,面對這樣乙個簡單的問題,我們顯然不需要乙個完善的雜湊表。

這裡只說下核心思想

雜湊表的主題是乙個列表,表裡的每個元素為乙個長度為2的小列表,分別放key和value,初始化時key為none,value為0,這裡的key就是咱們的斜率,value每次被尋到就加個1,用來計數。index用key%size來找,如果位置被佔了就直接往後找(線性探測法)。

第二次更新

第一次更新的問題找到了

修改如下

self._table[index][0] = key

self._table[index][1] += 1

改為self._table[index] = [key, self._table[index][1] + 1]

可能有些同學會像我一樣一頭霧水,這兩句看起來不是一樣嗎

現在讓我們看一下他們有什麼區別

或者用字典 當然不符合題目要求 只是單純解決這個問題,我們可以這麼做

n =

int(

input()

)hash_table =

for i in

range

(n):

temp_list =

input()

.split(

" ")

slope =

int(temp_list[1]

)//int(temp_list[0]

)if slope in hash_table:

hash_table[slope]+=1

else

: hash_table[slope]=1

value = hash_table.values(

)print

(max

(value)

)

求一條直線上能包含的最多數量的點

題目大意 給n個二維點的座標,求在所有點的連線中一條直線所能包含最多的點的個數 2000ms,1000的複雜度剛開始自己想了個n 3複雜度的方法,即使加上了感覺很有效的剪枝,但是依然tle了。看了網上某acmer的部落格,恍然大悟,原來n 2logn就可以過了 大致思路 列舉每乙個點 計算其他所有點...

二維平面上最多有多少個點在同一條直線上

思路一 兩點確立一條直線,判斷其餘的點是否在直線上 時間複雜度o n 3 submission result time limit exceeded int maxpoints vector points return max 思路二 記下任意兩點的斜率 不要是整形,float或double 找出最...

收到最多的同一條簡訊

我收到最多的一條簡訊內容如下 新年快樂 此簡訊雖有短短的四個字,卻深刻表達了我的祝福與情感,可謂言簡意賅,短小精幹,再加上以感嘆號收尾,意境深遠,有渾然天成之感,實乃簡訊之極品。並且 幾點說明 1 有的略有修改,比如四個字變成六個字 新年快樂 後面加上簽名 2 大多數簡訊內容都有截斷 3 有的人連別...