समस्या
हमें एक JavaScript फ़ंक्शन लिखना है जो संख्याओं की एक सरणी, arr, को पहला तर्क और एक संख्या, num, (num <= arr का आकार), को दूसरा तर्क के रूप में लेता है।
हमारे फ़ंक्शन को सरणी arr को अधिकतम num आसन्न (गैर-खाली) समूहों में विभाजित करना चाहिए ताकि कोई तत्व पीछे न छूटे।
ऐसे सभी पार्टीशन में से, हमारे फ़ंक्शन को उस पार्टीशन को चुनना चाहिए जहां सभी समूहों के औसत का योग सबसे बड़ा हो।
और अंत में हमें यह सबसे बड़ा योग वापस करना चाहिए।
उदाहरण के लिए, यदि फ़ंक्शन का इनपुट है
इनपुट
const arr = [10, 2, 3, 4, 10]; const num = 3;
आउटपुट
const output = 23;
आउटपुट व्याख्या
क्योंकि यदि हम सरणी को इस तरह विभाजित करते हैं -
[10], [2, 3, 4], [10]
औसत का योग होगा -
10 + (9)/3 + 10 = 23
जो सभी पार्टीशन में सबसे बड़ा है।
उदाहरण
const arr = [10, 2, 3, 4, 10];
const num = 3;
const greatestSum = (arr, num) => {
const sum = (arr = []) => arr.reduce((acc, num) => acc + num, 0);
let matrix = new Array(num + 1).fill(0).map(() => new Array(arr.length + 1).fill(0));
for (let index = arr.length; index >= 0; index--) {
const current = new Array(num + 1).fill(0).map(() => new Array(arr.length + 1).fill(0));
for (let currentK = num; currentK >= 0; currentK--) {
for (let count = arr.length - 1; count >= 0; count--) {
if (index === arr.length && currentK === num) {
current[currentK][count] = 0;
} else if (index < arr.length && currentK < num) {
current[currentK][count] = Math.max(
matrix[currentK][count + 1],
matrix[currentK + 1][0] + sum(arr.slice(index - count, index + 1)) / (count + 1)
);
} else {
current[currentK][count] = -Infinity;
}
}
}
matrix = current;
}
return matrix[0][0];
};
console.log(greatestSum(arr, num));
आउटपुट
23