समस्या
एक 2-D सरणी, वांछित पंक्तियों की संख्या r और स्तंभों की संख्या c दिए गए हैं, मूल सरणी के तत्वों को पंक्ति-क्रम (row-traversing) में बनाए रखते हुए एक नई 2-D सरणी बनाएं। यदि कुल तत्वों की संख्या मेल नहीं खाती, तो मूल सरणी लौटाएं।
उदाहरण
const arr = [ [6, 7], [8, 9] ]; const r = 1, c = 4; // आउटपुट: [[6, 7, 8, 9]]
कार्यान्वयन
const reshapeArray = (arr, r, c) => {
if (r * c !== arr.length * arr[0].length) {
return arr; // आकार मेल नहीं खाता, मूल लौटाएं
}
const res = [];
let row = [];
arr.forEach(items => items.forEach(num => {
row.push(num);
if (row.length === c) {
res.push(row);
row = [];
}
}));
return res;
};
console.log(reshapeArray(arr, r, c)); // [[6, 7, 8, 9]]आउटपुट
[[6, 7, 8, 9]]
व्याख्या
- पहले जांचें कि क्या नया आकार कुल तत्वों से मेल खाता है।
- मूल सरणी को पंक्ति-दर-पंक्ति समतल (flatten) करें।
- हर
cतत्वों पर एक नई पंक्ति शुरू करें। - यह दृष्टिकोण पंक्ति-क्रम को बनाए रखता है और O(m*n) समय में चलता है।