刷題72 交點

2022-07-28 03:51:15 字數 1351 閱讀 8360

給定兩條線段(表示為起點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個煉表頭開始,逐個節點遍歷對比,相同時就找到了第乙個公共交點。擴充套件為複雜的情況,兩個鍊錶長度不同時 這種情況就可以先得到...