समस्या
हमें एक जावास्क्रिप्ट फ़ंक्शन लिखना आवश्यक है जो संख्याओं की एक सरणी लेता है, एआर, पहले तर्क के रूप में, और एक संख्या, संख्या, (संख्या <=एआर का आकार), दूसरे तर्क के रूप में।
हमारे फ़ंक्शन को सरणी arr को अधिक से अधिक संख्या में आसन्न (गैर-रिक्त) समूहों में इस तरह विभाजित करना चाहिए कि हम कोई तत्व पीछे न छोड़ें।
ऐसे सभी विभाजनों में से, हमारे फ़ंक्शन को उस विभाजन को चुनना चाहिए जहां सभी समूहों के औसत का योग सबसे बड़ा हो।
और अंत में हमें यह सबसे बड़ी राशि वापस करनी चाहिए।
उदाहरण के लिए, यदि फ़ंक्शन का इनपुट है
इनपुट
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