LeetCode演算法題-Construct the Rectangle(Java實現)
這是悅樂書的第243 次更新,第256 篇原創
01 看題和準備
今天介紹的是LeetCode演算法題中Easy級別的第110題(順位題號是492)。對於Web開發人員,瞭解如何設計網頁的大小非常重要。因此,給定一個特定的矩形網頁區域,您現在的工作是設計一個矩形網頁,其長度L和寬度W滿足以下要求:
1.您設計的矩形網頁區域必須等於給定的目標區域。
2.寬度W不應大於長度L,這意味著L> = W.
3.長度L和寬度W之間的差異應儘可能小。
您需要按順序輸出您設計的網頁的長度L和寬度W.
例:
輸入:4
輸出:[2,2]
說明:目標區域為4,構建它的所有可能方法是[1,4],[2,2],[4,1]。
但根據要求2,[1,4]是非法的;根據要求3,與[2,2]相比,[4,1]不是最優的。所以長度L是2,寬度W是2。
注意:
-
給定區域不會超過10,000,000並且是正整數
-
您設計的網頁寬度和長度必須為正整數。
本次解題使用的開發工具是eclipse,jdk使用的版本是1.8,環境是win7 64位系統,使用Java語言編寫和測試。
02 第一種解法
給的引數area就是面積,要求輸出一個二維陣列,陣列中的元素為長寬,長是第一個元素,寬是第二個元素,並且長寬之差越小越好,那麼長寬之差最小的矩形就是正方形了。
先將area進行開方,得到一個整數正根,然後使用area對其取餘,如果能夠整除,那麼就是長,不能就依次自減,最後輸出一個長度為2的陣列。
public int[] constructRectangle(int area) { int sqrt = (int)Math.sqrt(area); while (area%sqrt != 0) { sqrt--; } return new int[]{area/sqrt, sqrt}; }
03 第二種解法
我們也可以做乘法,從1開始算起,只要當前寬的平方小於等於面積,就一直算下去,迴圈內部,我們依舊使用面積對寬取餘,能夠整除就是長。
public int[] constructRectangle2(int area) { int W = 1; for (int i=W; i*i <= area; i++) { if (area%i == 0) { W = i; } } return new int[]{area/W, W}; }
04 小結
演算法專題目前已日更超過三個月 ,演算法題文章110 +篇,公眾號對話方塊回覆【資料結構與演算法 】、【演算法 】、【資料結構 】中的任一關鍵詞,獲取系列文章合集。
以上就是全部內容,如果大家有什麼好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉發就是對我最大的回報和支援!