1. 程式人生 > >尋找平面上斜率最大的點

尋找平面上斜率最大的點

這是滴滴演算法面試時碰到的問題,在此寫一下思路: 給定100萬個平面上的點,每個點只有2個座標資訊,記為x座標和y座標,在小於O(n2)的時間複雜度內求出最大的斜率。 1.先對所有的點按照x座標進行排序 2.再兩兩比較即可找到最大斜率 接下來說說為什麼不用考慮其他點相連線的情況,而只需要考慮鄰近的點? 假設排序得到了A,B,C三點 (1)A,B,C三點共線,那麼Kab = Kbc = Kac; (2)A,B,C三點不共線,那麼Kac < max{Kab, Kbc} 畫一個草圖給大家看看: 給出Python 程式碼:
def fingbigslope(nums):
    if nums == None:
        return
    nums = sorted(nums)
    # sorted by the 1th dimensional value
    slope = 0
    for i in range(len(nums)-1):
        axval = nums[i][0]
        ayval = nums[i][1]
        bxval = nums[i+1][0]
        byval = nums[i+1][1]
        slope_i = (byval - ayval) / float((bxval - axval))
        if abs(slope_i) > slope:
            slope = slope_i
    return slope

相關推薦

尋找平面斜率

這是滴滴演算法面試時碰到的問題,在此寫一下思路: 給定100萬個平面上的點,每個點只有2個座標資訊,記為x座標和y座標,在小於O(n2)的時間複雜度內求出最大的斜率。 1.先對所有的點按照x座標進行排序 2.再兩兩比較即可找到最大斜率 接下來說說為什麼不用考慮其他點相連線的

給定一個二維平面平面有 n 個,求多有多少個在同一條直線上。

需求:給定一個二維平面,平面上有 n 個點,求最多有多少個點在同一條直線上。 分析思路: 1、將所有點二維座標化,即定義出所有點的x,y座標值 2、遍歷出所有取出兩點的情況(不考慮先後順序),根據任意兩點都確定一條直線,直線引數為k斜率,b與y軸交點的縱座標(此時x=0),將他們放入一個

面試題61:斜率的那條線通過的兩個

題目: 平面上有N個點,每兩個點都確定一條直線,求出斜率最大的那條直線所通過的兩個點,斜率不存在的情況不考慮。 思路: 可以先將N個點按x進行排序。 斜率k最大值為max(斜率(point[i],point[i+1])) 0<=i<n-2。 時間複雜度:O(nl

尋找平面中距離遠的

問題 給定平面上N個點的座標,找出距離最遠的兩個點。 分析 類似於“最近點對問題”,這個問題也可以用列舉的方法求解,時間複雜度O(n^2)。 “尋找最近點對”是用到分治策略降低複雜度,而“尋找最遠點對”可利用幾何性質。注意到:對於平面上有n個點,這一對最遠點必然存在於這n

NOI:2704 尋找平面的極大

題目連結:http://noi.openjudge.cn/ch0406/2704/題意:根據提示,只有位於單獨顏色上的點或者說只有右上角的點才是極大點,所以我對每一個點與x和y軸組成的矩形進行標記,將其中每個點的標記值++,最後只有標記值為1的點,才是我們要找的點#inclu

Codeforces Round #545 (Div. 2) E 強連通塊 + dag路徑 + 將狀態看成建圖

[1] spa its 聯通塊 def com += main efi https://codeforces.com/contest/1138/problem/E 題意 有n個城市(1e5),有m條單向邊(1e5),每一周有d天(50),對於每個城市假如在某一天為1表示這

HDU--3829--Cat VS Dog【獨立集】

sin ext path lin 匹配 pat app targe anim 鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=3829 題意:動物園有n條狗,m頭貓,p個小孩。每一個小孩有一個喜歡的動物和討厭的動物,如今動物園要

hdu 1565 方格取數(2)(網絡流之權獨立集)

href aps flow bit 明顯 log sum dir 一個 題目鏈接:hdu 1565 方格取數(2) 題意: 有一個n*m的方格,每個方格有一個數,現在讓你選一些數。使得和最大。 選的數不能有相鄰的。 題解: 我們知道對於普通二分圖來說,最大獨立點集 + 最小

[luoguP2774] 方格取數問題(權獨立集)

close inf 顏色不同 digi turn 反選 hid pen 端點 傳送門 引入兩個概念: 最小點權覆蓋集:滿足每一條邊的兩個端點至少選一個的最小權點集。 最大點權獨立集:滿足每一條邊的兩個端點最多選一個的最大權點集。 現在對網格染色,使得相鄰兩點顏

binary-tree-maximum-path-sum——二叉樹任意一條路徑

binary 遞歸 nod 父節點 遍歷 color find start node Given a binary tree, find the maximum path sum. The path may start and end at any node in the

【51nod 1100】斜率

alt mil -1 closed 個數 斜率 return hid %d Description 平面上有N個點,任意2個點確定一條直線,求出所有這些直線中,斜率最大的那條直線所通過的兩個點。 (點的編號為1-N,如果有多條直線斜率相等,則輸出所有結果,按照點的X軸坐

51Nod - 1100 斜率

nod esp ++ sca poi name mat pri 排序 #include <bits/stdc++.h> using namespace std; typedef long long LL; const int maxn=10005; struc

HDU 1565 - 方格取數(1) - [狀壓DP][網絡流 - 權獨立集和權覆蓋集]

printf 一個 cnblogs ret com bool limit .net amp 題目鏈接:https://cn.vjudge.net/problem/HDU-1565 Time Limit: 10000/5000 MS (Java/Others) Memory

POJ 2771 Guardian of Decency (二分圖獨立集)

str number iostream hit school ear one ability clas Guardian of Decency Time Limit: 3000MS Memory Limit: 65536K Total S

51Nod-1100 斜率-斜率小問題

問題描述: 平面上有N個點,任意2個點確定一條直線,求出所有這些直線中,斜率最大的那條直線所通過的兩個點。 (點的編號為1-N,如果有多條直線斜率相等,則輸出所有結果,按照點的X軸座標排序,正序輸出。資料中所有點的X軸座標均不相等,且點座標為隨機) AC程式碼: struct

[學習筆記]小割之權覆蓋&&權獨立集

最小點權覆蓋 給出一個二分圖,每個點有一個非負點權要求選出一些點構成一個覆蓋,問點權最小是多少   建模: S到左部點,容量為點權 右部點到T,容量為點權 左部點到右部點的邊,容量inf 求最小割即可。   證明: 每一個割集,對應選擇一些點,對應一個覆蓋。 每個覆蓋

hdu 1569 權獨立集

二分圖最小點權覆蓋     從x或者y集合中選取一些點,使這些點覆蓋所有的邊,並且選出來的點的權值儘可能小。     建模:     原二分圖中的邊(u,v)替換為容量為INF的有向邊(u,v),設立源點s和匯點t,將s和x集合中的點相連,容量為該點的權值;將y中的點同

數字之魅:尋找陣列中的值和小值

陣列是最簡單的一種資料結構。我們經常碰到的一個基本問題,就是尋找整個陣列中最大的數,或者最小的數。這時,我們都會掃描一遍陣列,把最大(最小)的數找出來。如果我們需要同時找出最大和最小的數呢? 對於一個由N個整陣列成的陣列,需要比較多少次才能把最大和最小的數找出來呢? 這個題

陣列:尋找陣列中的值與小值

尋找陣列中的最小值與最大值有很多方法:比如分別進行兩次遍歷,一次求最大值,一次求最小值,需要比較2N次,或者取單元素法,用兩個變數分別表示最小值和最大值,min表示最小值,max表示最大值,遍歷一次陣列,每次取出一個數組先與最小值比較,再與最大值比較等等。這次記錄的是取雙元素

HDU 1565 方格取數(1)(權獨立集)

題目大意:給你一個n*n的格子的棋盤,每個格子裡面有一個非負數。 從中取出若干個數,使得任意的兩個數所在的格子沒有公共邊,就是說所取的數所在的2個格子不能相鄰,並且取出的數的和最大。 解題思路:最大點權獨立集,關鍵是怎麼建圖了,我們可以採用染色的思想對這張圖