給定兩條線段(表示為起點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 解釋 有四種方式可以湊成總金額...