मान लीजिए कि हमारे पास एक विशिष्ट आयताकार वेब पेज क्षेत्र है, हमारा काम एक आयताकार वेब पेज डिजाइन करना है, जिसकी लंबाई 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, ]