面試題 16 14 最佳直線

2021-10-24 13:29:57 字數 2015 閱讀 7095

給定乙個二維平面及平面上的 n 個點列表points,其中第i個點的座標為points[i]=[xi,yi]。請找出一條直線,其通過的點的數目最多。

設穿過最多點的直線所穿過的全部點編號從小到大排序的列表為s,你僅需返回[s[0],s[1]]作為答案,若有多條直線穿過了相同數量的點,則選擇s[0]值較小的直線返回,s[0]相同則選擇s[1]值較小的直線返回。

示例:輸入: [[0,0],[1,1],[1,0],[2,0]]

輸出: [0,2]

解釋: 所求直線穿過的3個點的編號為[0,2,3]

2 <= len(points) <= 300

len(points[i]) = 2

1.暴力,遍歷所有2個點可能組成的直線,再對每條直線得到最終的答案,乙個小技巧是如何解決相同點的問題,這裡我們維護乙個變數記錄下點的多少

2.乙個巧妙的方式,需要觀察到所有在一條直線上的點的k和b是一樣的

class solution:

def bestline(self, points: list[list[int]]) -> list[int]:

res=

c=0for i in range(len(points)):

for j in range(len(points)):

if i!=j:

cnt=0

t=for k in range(len(points)):

if (points[j][1]-points[i][1])*(points[k][0]-points[i][0])==(points[k][1]-points[i][1])*(points[j][0]-points[i][0]):

cnt+=1

if len(t)<2:

if cnt==c:

c=cnt

elif cnt>c:

c=cnt

res=[t]

res.sort()

return res[0]

class solution:

def bestline(self, points: list[list[int]]) -> list[int]:

d = {}

x = y = 0

maxcount = 0

for i in range(len(points)):

for j in range(i+1, len(points)):

k, b = self.f([points[i], points[j]])

if (k, b) in d.keys():

d[(k, b)][0] += 1

else:

d[(k, b)] = [1, (i, j)]

if d[(k, b)][0] > maxcount or (d[(k, b)][0] == maxcount and d[(k, b)][1][0] < x) or (d[(k, b)][0] == maxcount and d[(k, b)][1][0] == x and d[(k, b)][1][1] < y):

maxcount = d[(k, b)][0]

x, y = d[(k, b)][1]

#print(x, y)

return [x, y]

# 求兩點之間連線的斜率k和截距b

def f(self, points: list[list[int]]) -> list[int]:

if points[0][0] == points[1][0]:

return [float('inf'), points[0][0]]

else:

return [(points[1][1]-points[0][1]) / (points[1][0]-points[0][0]),

(points[0][1]*points[1][0]-points[1][1]*points[0][0]) / (points[1][0]-points[0][0])]

面試題 PHP面試題

建議 比如是系統配置,缺少了無法執行,自然使用 require 如果某一段程式少了,只是少了統計 訪問的,不是必不可少的。可以使用 include 而加不加 once 就是效率上的區別,雖然系統會幫你考慮只包含一次,但系統的判斷會降低效率,因此,更應該在開發之初,把目錄結構調整高好,盡量不使用 on...

面試題 騰訊2012面試題

問題描述 例如手機朋友網有n個伺服器,為了方便使用者的訪問會在伺服器上快取資料,因此使用者每次訪問的時候最好能保持同一臺伺服器。已有的做法是根據serveripindex qqnum n 得到請求的伺服器,這種方法很方便將使用者分到不同的伺服器上去。但是如果一台伺服器死掉了,那麼n就變為了n 1,那...

面試題總結 html面試題)

附上鏈結 doctype 的作用是什麼?宣告一般位於文件的第一行,它的作用主要是告訴瀏覽器以什麼樣的模式來解析文件。一般指定了之後會以標準模式來 進行文件解析,否則就以相容模式進行解析。在標準模式下,瀏覽器的解析規則都是按照最新的標準進行解析的。而在相容模式下,瀏 覽器會以向後相容的方式來模擬老式瀏...