LeetCode 面試題 16 03 交點

2021-10-06 19:24:02 字數 1370 閱讀 9403

給定兩條線段(表示為起點start = 和終點end = ),如果它們有交點,請計算其交點,沒有交點則返回空值。

要求浮點型誤差不超過10^-6。若有多個交點(線段重疊)則返回 x 值最小的點,x 座標相同則返回 y 值最小的點。

示例 1:

輸入:line1 = ,

line2 = ,

輸出:

示例 2:

輸入:line1 = ,

line2 = ,

輸出:

示例 3:

輸入:line1 = ,

line2 = ,

輸出: {},兩條線段沒有交點

座標絕對值不會超過 2^7

輸入的座標均是有效的二維座標

參考的思路來自於 劉汝佳 演算法藝術與資訊學競賽 p357前後章節

class solution //預設建構函式

point(double xx,double yy):x(xx),y(yy){}//自定義建構函式

bool operator<(const point p)const

//點乘行列式

double dotdet(double x1, double y1, double x2, double y2)

//三點點乘

double dotproduct(point a, point b, point c)

//用來計算共線的情況下,a是否在b,c之間

int betweencmp(point a, point b, point c)

vectorintersection(vector& start1, vector& end1, vector& start2, vector& end2)

//非規範相交,相交點可能是四點中的乙個

if(d1==0&&betweencmp(c,a,b)<=0&&d2!=0)//c,a,b共線,且c在a,b之間,d,a,b不共線

if(d2==0&&betweencmp(d,a,b)<=0&&d1!=0)//d,a,b共線,且d在a,b之間,c,a,b不共線

if(d3==0&&betweencmp(a,c,d)<=0&&d4!=0)//a,c,d共線,且a在c,d之間

if(d4==0&&betweencmp(b,c,d)<=0&&d3!=0)//b,c,d共線,且b在c,d之間

//重合

if(d1==0&&d2==0);

sort(ps.begin(),ps.end());

result.push_back(ps[1].x);//選擇位於中間的第二個點

result.push_back(ps[1].y);}}

return result;

}};

leetcode 面試題專題

面試題51.陣列中的逆序對 在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。利用歸併排序,將陣列分成兩部分,前面一部分和後面一部分,進行歸併的時候,需要比較兩個陣列的數值大小,如果第二個陣列的值小的話,代表前乙個陣列剩下的都...

位元組面試題 leetcode

給定乙個迴圈陣列 最後乙個元素的下乙個元素是陣列的第乙個元素 輸出每個元素的下乙個更大元素。數字 x 的下乙個更大的元素是按陣列遍歷順序,這個數字之後的第乙個比它更大的數,這意味著你應該迴圈地搜尋它的下乙個更大的數。如果不存在,則輸出 1。示例 1 輸入 1,2,1 輸出 2,1,2 解釋 第乙個 ...

leetcode面試題 08 11 硬幣

硬幣。給定數量不限的硬幣,幣值為25分 10分 5分和1分,編寫 計算n分有幾種表示法。結果可能會很大,你需要將結果模上1000000007 示例1 輸入 n 5 輸出 2 解釋 有兩種方式可以湊成總金額 5 55 1 1 1 1 1 示例2 輸入 n 10 輸出 4 解釋 有四種方式可以湊成總金額...