這兩天看到同一個問題的算法有三個不同版本的寫法, 但都是錯的. 覺得無言......
這兩天看到同一個問題的算法有三個不同版本的寫法, 但都是錯的. 覺得無言...... 命題是這樣, 假設你有個 range A , 跟一個 range B. 假設 1 ~ 5 , 3 ~ 6 . 我們假設頭是 A1,B1 , 尾是 An,Bn. 這種時間要找出 A1 ~ An 跟 B1 ~ Bn 的是否有交集, 最簡單的寫法是 A1 < Bn 且 An > B1 . (要不要列等於就看你的命題) 也就是我的開頭比對方的結尾小, 且我的結尾比對方的開頭大. 這公式不那麼直覺, 但在紙上推一下就可以推出來了. 我這兩天看到幾個覺得他們文氏圖一定沒學好的版本:
- A1 < B1 && AN > BN : 這個是 要 A 完全包含 B 才會成立.
- (A1 > B1 && A1 < Bn ) || (An > B1 && An < Bn) : 這無法處理到A 完全包含B的情境(剛好就是上面1)
- (A1 > B1 && An > B1 && An <= Bn) || (A1 < B1 && An > B1 && An <= Bn) || .... 之類的, 但仔細檢查過邏輯後, 發現他列舉時漏了其中一個可能性. 邊修還要一邊吐槽, 實在是有點累人. QQ
Comments
No approved comments yet.