我們有 n 個與座標軸對齊的矩形, 其中 n > 0, 判斷它們是否能精確地覆蓋乙個矩形區域。
每個矩形用左下角的點和右上角的點的座標來表示。例如, 乙個單位正方形可以表示為 [1,1,2,2]。 ( 左下角的點的座標為 (1, 1) 以及右上角的點的座標為 (2, 2) )。
示例 1:
rectangles = [[1,1,3,3],
[3,1,4,2],
[3,2,4,4],
[1,3,2,4],
[2,3,3,4]
]返回 true。5個矩形一起可以精確地覆蓋乙個矩形區域。
示例 2:
rectangles = [[1,1,2,3],
[1,3,2,4],
[3,1,4,2],
[3,2,4,4]
]返回 false。兩個矩形之間有間隔,無法覆蓋成乙個矩形。
示例 3:
rectangles = [[1,1,3,3],
[3,1,4,2],
[1,3,2,4],
[3,2,4,4]
]返回 false。圖形頂端留有間隔,無法覆蓋成乙個矩形。
示例 4:
rectangles = [解題思路:[1,1,3,3],
[3,1,4,2],
[1,3,2,4],
[2,2,4,4]
]返回 false。因為中間有相交區域,雖然形成了矩形,但不是精確覆蓋。
邏輯題,數學題,雜湊。如果明白完美矩形的數學描述以及非常規型別的雜湊實現,那麼這題就easy了。
完美矩形的數學描述:假設最終的區域裡,s所有頂點的x_min,x_max,y_min,y_max被唯一確定,所有小的矩形的面積總和face。滿足完美矩形需要3個條件。
(x_max - x_min)*(y_max - y_min) == face。
4個頂點只出現過一次。
其餘頂點必然出現過偶數次。(1次和3次都會出現空缺,代表不完美)
另外,判斷某個頂點是否出現,需要用非常規型別的雜湊實現。這個非常規型別是兩個int。通過字串流,可以將int轉成字串,然後將多個int轉成的字串相連,中間加入空格,組成的乙個大字串,就是我們最終要查詢的物件。
stringstream ss;
ss>string;
這樣一來,別說兩個int,多個int也是可以的。另外字串流還可以轉換其他型別,不僅僅是int,因此方法比較通用。我也看見過官方給出的運算速度最快的**,方法基本類似,就是把兩個int鏈結成了long long,效率更高,但是不能解決一般的非常規資料型別的hash, 因此各有各的好處。
//4個頂點對應的字串
string ul, ur, dl, dr;
ss.clear();
ss << x_min << " " << y_max;
ss >> x_str >> y_str;
ul = x_str +" "+ y_str;
ss.clear();
ss << x_max << " " << y_max;
ss >> x_str >> y_str;
ur = x_str + " " + y_str;
ss.clear();
ss << x_min << " " << y_min;
ss >> x_str >> y_str;
dl = x_str + " " + y_str;
ss.clear();
ss << x_max << " " << y_min;
ss >> x_str >> y_str;
dr = x_str + " " + y_str;
if (mp[ul] != 1 || mp[ur] != 1 || mp[dl] != 1 || mp[dr] != 1)
unordered_map::iterator it;
for (it = mp.begin(); it != mp.end(); it++) }}
return true;}};
391 完美矩形
給你乙個陣列 rectangles 其中 rectangles i xi,yi,ai,bi 表示乙個座標軸平行的矩形。這個矩形的左下頂點是 xi,yi 右上頂點是 ai,bi 如果所有矩形一起精確覆蓋了某個矩形區域,則返回 true 否則,返回 false 示例 1 輸入 rectangles 1,...
391 完美矩形問題
我們有 n 個與座標軸對齊的矩形,其中n 0,判斷它們是否能精確地覆蓋乙個矩形區域。每個矩形用左下角的點和右上角的點的座標來表示。例如,乙個單位正方形可以表示為 1,1,2,2 左下角的點的座標為 1,1 以及右上角的點的座標為 2,2 示例 1 rectangles 1,1,3,3 3,1,4,2...
力扣 391 完美矩形 Python題解
我們有 n 個與座標軸對齊的矩形,其中 n 0,判斷它們是否能精確地覆蓋乙個矩形區域。每個矩形用左下角的點和右上角的點的座標來表示。例如,乙個單位正方形可以表示為 1,1,2,2 左下角的點的座標為 1,1 以及右上角的點的座標為 2,2 示例 1 rectangles 1,1,3,3 3,1,4,...