給定兩個(gè)包含整數(shù)的范圍[x1:x2]和[y1:y2],其中x1≤x2且y1≤y2,測(cè)試這兩個(gè)范圍是否存在重疊的最有效方法是什么?一個(gè)簡單的實(shí)現(xiàn)如下:bool testOverlap(int x1, int x2, int y1, int y2) { return (x1 >= y1 && x1 <= y2) || (x2 >= y1 && x2 <= y2) || (y1 >= x1 && y1 <= x2) || (y2 >= x1 && y2 <= x2);}但我希望有更有效的方法來進(jìn)行計(jì)算。就最少的操作而言,哪種方法是最有效的。
3 回答

哆啦的時(shí)光機(jī)
TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊
這很容易扭曲正常的人腦,因此我發(fā)現(xiàn)一種視覺方法更容易理解:
解釋
如果兩個(gè)范圍“太胖”以致不能恰好是兩個(gè)寬度的總和,則它們會(huì)重疊。
對(duì)于范圍[a1, a2],[b1, b2]這將是:
/**
* we are testing for:
* max point - min point < w1 + w2
**/
if max(a2, b2) - min(a1, b1) < (a2 - a1) + (b2 - b1) {
// too fat -- they overlap!
}
- 3 回答
- 0 關(guān)注
- 582 瀏覽
添加回答
舉報(bào)
0/150
提交
取消