Leetcode 391 完美矩形

2021-09-02 14:59:57 字數 2632 閱讀 9291

我們有 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,...