給定兩條線段(表示為起點start = 和終點end = ),如果它們有交點,請計算其交點,沒有交點則返回空值。
要求浮點型誤差不超過10^-6。若有多個交點(線段重疊)則返回 x 值最小的點,x 座標相同則返回 y 值最小的點。
示例 1:
輸入:line1 = ,
line2 = ,
輸出:
示例 2:
輸入:line1 = ,
line2 = ,
輸出:
示例 3:
輸入:line1 = ,
line2 = ,
輸出: {},兩條線段沒有交點
座標絕對值不會超過 2^7
輸入的座標均是有效的二維座標
分析斜率判斷兩條直線相交情況
分析斜率k1和k2,判斷交點;
k1=0,k2=0;
k1=0,k2不存在;
k1不存在,k2=0;
k1不存在,k2不存在;
k1,k2都存在;
var intersection = function (start1, end1, start2, end2, k = 0)// 這個是可能的交點
let x = null, y = null
// 第一條平行於y軸
if (start1[0] - end1[0] === 0) else
} else if (start1[1] - end1[1] === 0) else if (start2[0] - end2[0] === 0) else
} else if ((end2[1] - start2[1]) / (end2[0] - start2[0]) === (end1[1] - start1[1]) / (end1[0] - start1[0])) else
} else
let l = math.max(math.min(start1[0], end1[0]), math.min(start2[0], end2[0]))
let r = math.min(math.max(start1[0], end1[0]), math.max(start2[0], end2[0]))
let b = math.max(math.min(start1[1], end1[1]), math.min(start2[1], end2[1]))
let t = math.min(math.max(start1[1], end1[1]), math.max(start2[1], end2[1]))
if (x !== null && x >= l && x <= r && y <= t && y >= b) else
};
LeetCode刷題筆記 72
題目 編輯距離 給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 插入乙個字元 刪除乙個字元 替換乙個字元 示例 1 輸入 word1 horse word2 ros 輸出 3 解釋 horse rorse 將 ...
刷題刷題 京東
題目 二維陣列為三列多行是陣列,每行存有三個數字,分別用ai,bi,ci標示 當某行的三個數字全都小於另一行的三個數字時,即 ai思路 對於第一列反向排序,保證第一列數從大到小排序。之後用後面的行依次與前面的行進行對比,將無效行的價值置為零。include include includelong l...
刷題 尋找兩個鍊錶第乙個交點
輸入兩個鍊錶,找出它們的第乙個公共結點。本題的思路很簡單,首先我們考慮一種特殊的相交鍊錶,如下圖所示 兩個相交的鍊錶長度相同,想要找到第乙個公共的節點很簡單,維護兩個指標,從2個煉表頭開始,逐個節點遍歷對比,相同時就找到了第乙個公共交點。擴充套件為複雜的情況,兩個鍊錶長度不同時 這種情況就可以先得到...