我希望了解如何高效地解决这个问题:
给定N个矩形,每个矩形都有一个左上角和右下角,请找出N个矩形联合的周长。
我只有O(N ^ 2)的算法,速度太慢了,请寻找更有效的算法。
您可以假设坐标值为正整数且小于100000。
编辑:
例如,在这种情况下,周长为30。
一个O(n^2)的算法:
最终的结果是答案。
给定N个矩形,每个矩形都有一个左上角和右下角,请找出N个矩形联合的周长。
我只有O(N ^ 2)的算法,速度太慢了,请寻找更有效的算法。
您可以假设坐标值为正整数且小于100000。
编辑:
例如,在这种情况下,周长为30。
一个O(n^2)的算法:
for x=0 to maxx
for i=0 to N
if lowx[i] = x
for j=lowy[i] to highy[i]
d[j]++
if d[j] = 1 then ret++
if highy[i] = x
for j=lowy[i] to highy[i]
d[j]--
if d[j] = 0 then ret++
for y=0 to maxy
if d[y] = 0 && d[y + 1] >= 1 then ret++
if d[y] >= 1 && d[y + 1] = 0 then ret++
最终的结果是答案。