मान लीजिए कि हमारे पास एक विशिष्ट आयताकार वेब पेज क्षेत्र है, हमारा काम एक आयताकार वेब पेज डिजाइन करना है, जिसकी लंबाई L और चौड़ाई W जो निम्नलिखित आवश्यकताओं को पूरा करती है -
-
वेब पेज का क्षेत्रफल दिए गए लक्ष्य क्षेत्र के बराबर होना चाहिए।
-
चौड़ाई W लंबाई L से बड़ी नहीं होनी चाहिए, और L>=W.
-
L और W के बीच का अंतर जितना संभव हो उतना छोटा होना चाहिए।
इसलिए, यदि इनपुट 4 की तरह है, तो आउटपुट [2,2] होगा, क्योंकि लक्ष्य क्षेत्र 4 है, और इसे बनाने के सभी संभावित तरीके हैं [1,4], [2,2], [4 ,1]। यहाँ आवश्यकता के अनुसार, यह 2 है, [1,4] अवैध है; आवश्यकता 3 के अनुसार, [4,1] [2,2] की तुलना में उचित नहीं है। तो लंबाई L 2 है, और चौड़ाई W 2 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
इनिशियलाइज़ करने के लिए i :=क्षेत्रफल का वर्गमूल, जब i> 0, अपडेट करें (i से 1 घटाएं), करें −
-
यदि क्षेत्र mod i 0 के समान है, तो -
-
एक सरणी v परिभाषित करें, {area/i, i}
insert डालें -
वापसी वी
-
-
-
वापसी {-1, -1}
उदाहरण
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: vector<int> constructRectangle(int area) { for (int i = sqrt(area); i > 0; i--) { if (area % i == 0) { vector<int> v{ area / i, i }; return v; } } return { -1, -1 }; } }; main(){ Solution ob; print_vector(ob.constructRectangle(4)); }
इनपुट
4
आउटपुट
[2, 2, ]